redis與mongodb與memcached

Redis掐禁、Memcache和MongoDB的區(qū)別

Memcached
Memcached的優(yōu)點:
Memcached可以利用多核優(yōu)勢蔫敲,單實例吞吐量極高洋幻,可以達到幾十萬QPS(取決于key、value的字節(jié)大小以及服務(wù)器硬件性能泥兰,日常環(huán)境中QPS高峰大約在4-6w左右)。適用于最大程度扛量题禀。
支持直接配置為session handle鞋诗。
Memcached的局限性:
只支持簡單的key/value數(shù)據(jù)結(jié)構(gòu),不像Redis可以支持豐富的數(shù)據(jù)類型迈嘹。
無法進行持久化削彬,數(shù)據(jù)不能備份,只能用于緩存使用秀仲,且重啟后數(shù)據(jù)全部丟失融痛。
無法進行數(shù)據(jù)同步,不能將MC中的數(shù)據(jù)遷移到其他MC實例中神僵。
Memcached內(nèi)存分配采用Slab Allocation機制管理內(nèi)存雁刷,value大小分布差異較大時會造成內(nèi)存利用率降低,并引發(fā)低利用率時依然出現(xiàn)踢出等問題保礼。需要用戶注重value設(shè)計沛励。

Redis
Redis的優(yōu)點:
支持多種數(shù)據(jù)結(jié)構(gòu),如 string(字符串)炮障、 list(雙向鏈表)目派、dict(hash表)、set(集合)铝阐、zset(排序set)址貌、hyperloglog(基數(shù)估算)
支持持久化操作,可以進行aof及rdb數(shù)據(jù)持久化到磁盤徘键,從而進行數(shù)據(jù)備份或數(shù)據(jù)恢復(fù)等操作练对,較好的防止數(shù)據(jù)丟失的手段。
支持通過Replication進行數(shù)據(jù)復(fù)制吹害,通過master-slave機制螟凭,可以實時進行數(shù)據(jù)的同步復(fù)制,支持多級復(fù)制和增量復(fù)制它呀,master-slave機制是Redis進行HA的重要手段螺男。
單線程請求,所有命令串行執(zhí)行纵穿,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題下隧。
支持pub/sub消息訂閱機制,可以用來進行消息訂閱與通知谓媒。
支持簡單的事務(wù)需求淆院,但業(yè)界使用場景很少,并不成熟句惯。

Redis的局限性:
Redis只能使用單線程土辩,性能受限于CPU性能支救,故單實例CPU最高才可能達到5-6wQPS每秒(取決于數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)大小以及服務(wù)器硬件性能拷淘,日常環(huán)境中QPS高峰大約在1-2w左右)各墨。
支持簡單的事務(wù)需求,但業(yè)界使用場景很少启涯,并不成熟贬堵,既是優(yōu)點也是缺點。
Redis在string類型上會消耗較多內(nèi)存逝嚎,可以使用dict(hash表)壓縮存儲以降低內(nèi)存耗用扁瓢。

Mc和Redis都是Key-Value類型,不適合在不同數(shù)據(jù)集之間建立關(guān)系补君,也不適合進行查詢搜索引几。比如redis的keys pattern這種匹配操作,對redis的性能是災(zāi)難挽铁。

mongoDB
mongoDB 是一種文檔性的數(shù)據(jù)庫伟桅。先解釋一下文檔的數(shù)據(jù)庫,即可以存放xml叽掘、json楣铁、bson類型系那個的數(shù)據(jù)。

這些數(shù)據(jù)具備自述性(self-describing)更扁,呈現(xiàn)分層的樹狀數(shù)據(jù)結(jié)構(gòu)盖腕。redis可以用hash存放簡單關(guān)系型數(shù)據(jù)。

mongoDB 存放json格式數(shù)據(jù)浓镜。

適合場景:事件記錄溃列、內(nèi)容管理或者博客平臺,比如評論系統(tǒng)膛薛。

1.mongodb持久化原理

mongodb與mysql不同听隐,mysql的每一次更新操作都會直接寫入硬盤,但是mongo不會哄啄,做為內(nèi)存型數(shù)據(jù)庫雅任,數(shù)據(jù)操作會先寫入內(nèi)存,然后再會持久化到硬盤中去咨跌,那么mongo是如何持久化的呢
mongodb在啟動時沪么,專門初始化一個線程不斷循環(huán)(除非應(yīng)用crash掉),用于在一定時間周期內(nèi)來從defer隊列中獲取要持久化的數(shù)據(jù)并寫入到磁盤的journal(日志)和mongofile(數(shù)據(jù))處锌半,當(dāng)然因為它不是在用戶添加記錄時就寫到磁盤上禽车,所以按mongodb開發(fā)者說,它不會造成性能上的損耗,因為看過代碼發(fā)現(xiàn)哭当,當(dāng)進行CUD操作時,記錄(Record類型)都被放入到defer隊列中以供延時批量(groupcommit)提交寫入冗澈,但相信其中時間周期參數(shù)是個要認(rèn)真考量的參數(shù)钦勘,系統(tǒng)為90毫秒,如果該值更低的話亚亲,可能會造成頻繁磁盤操作彻采,過高又會造成系統(tǒng)宕機時數(shù)據(jù)丟失過。

2.什么是NoSQL數(shù)據(jù)庫捌归?NoSQL和RDBMS有什么區(qū)別肛响?在哪些情況下使用和不使用NoSQL數(shù)據(jù)庫?
NoSQL是非關(guān)系型數(shù)據(jù)庫惜索,NoSQL = Not Only SQL特笋。
關(guān)系型數(shù)據(jù)庫采用的結(jié)構(gòu)化的數(shù)據(jù),NoSQL采用的是鍵值對的方式存儲數(shù)據(jù)巾兆。
在處理非結(jié)構(gòu)化/半結(jié)構(gòu)化的大數(shù)據(jù)時猎物;在水平方向上進行擴展時;隨時應(yīng)對動態(tài)增加的數(shù)據(jù)項時可以優(yōu)先考慮使用NoSQL數(shù)據(jù)庫角塑。
在考慮數(shù)據(jù)庫的成熟度蔫磨;支持;分析和商業(yè)智能圃伶;管理及專業(yè)性等問題時堤如,應(yīng)優(yōu)先考慮關(guān)系型數(shù)據(jù)庫。

3.MySQL和MongoDB之間最基本的區(qū)別是什么窒朋?
關(guān)系型數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫的區(qū)別搀罢,即數(shù)據(jù)存儲結(jié)構(gòu)的不同。

4.MongoDB的特點是什么炼邀?
(1)面向文檔(2)高性能(3)高可用(4)易擴展(5)豐富的查詢語言

5.MongoDB支持存儲過程嗎魄揉?如果支持的話,怎么用拭宁?
MongoDB支持存儲過程洛退,它是javascript寫的,保存在db.system.js表中杰标。

6.如何理解MongoDB中的GridFS機制兵怯,MongoDB為何使用GridFS來存儲文件?
GridFS是一種將大型文件存儲在MongoDB中的文件規(guī)范腔剂。使用GridFS可以將大文件分隔成多個小文檔存放媒区,這樣我們能夠有效的保存大文檔,而且解決了BSON對象有限制的問題。

7.為什么MongoDB的數(shù)據(jù)文件很大袜漩?
MongoDB采用的預(yù)分配空間的方式來防止文件碎片绪爸。

8.當(dāng)更新一個正在被遷移的塊(Chunk)上的文檔時會發(fā)生什么?
更新操作會立即發(fā)生在舊的塊(Chunk)上宙攻,然后更改才會在所有權(quán)轉(zhuǎn)移前復(fù)制到新的分片上奠货。

9.MongoDB在A:{B,C}上建立索引,查詢A:{B,C}和A:{C,B}都會使用索引嗎座掘?
不會递惋,只會在A:{B,C}上使用索引。

10.如果一個分片(Shard)停止或很慢的時候溢陪,發(fā)起一個查詢會怎樣萍虽?
如果一個分片停止了,除非查詢設(shè)置了“Partial”選項形真,否則查詢會返回一個錯誤杉编。如果一個分片響應(yīng)很慢,MongoDB會等待它的響應(yīng)没酣。

Redis王财、Memcache和MongoDB的區(qū)別
從以下幾個維度,對redis裕便、memcache绒净、mongoDB 做了對比,

1偿衰、性能

都比較高挂疆,性能對我們來說應(yīng)該都不是瓶頸

總體來講,TPS方面redis和memcache差不多下翎,要大于mongodb

2缤言、操作的便利性

memcache數(shù)據(jù)結(jié)構(gòu)單一

redis豐富一些,數(shù)據(jù)操作方面视事,redis更好一些胆萧,較少的網(wǎng)絡(luò)IO次數(shù)

mongodb支持豐富的數(shù)據(jù)表達,索引俐东,最類似關(guān)系型數(shù)據(jù)庫跌穗,支持的查詢語言非常豐富

3、內(nèi)存空間的大小和數(shù)據(jù)量的大小

redis在2.0版本后增加了自己的VM特性虏辫,突破物理內(nèi)存的限制蚌吸;可以對key value設(shè)置過期時間(類似memcache)

memcache可以修改最大可用內(nèi)存,采用LRU算法

mongoDB適合大數(shù)據(jù)量的存儲,依賴操作系統(tǒng)VM做內(nèi)存管理砌庄,吃內(nèi)存也比較厲害羹唠,服務(wù)不要和別的服務(wù)在一起

4奕枢、可用性(單點問題)

對于單點問題,

redis佩微,依賴客戶端來實現(xiàn)分布式讀寫缝彬;主從復(fù)制時,每次從節(jié)點重新連接主節(jié)點都要依賴整個快照,無增量復(fù)制哺眯,因性能和效率問題跌造,

所以單點問題比較復(fù)雜;不支持自動sharding,需要依賴程序設(shè)定一致hash 機制族购。

一種替代方案是,不用redis本身的復(fù)制機制陵珍,采用自己做主動復(fù)制(多份存儲)寝杖,或者改成增量復(fù)制的方式(需要自己實現(xiàn)),一致性問題和性能的權(quán)衡

Memcache本身沒有數(shù)據(jù)冗余機制互纯,也沒必要瑟幕;對于故障預(yù)防,采用依賴成熟的hash或者環(huán)狀的算法留潦,解決單點故障引起的抖動問題只盹。

mongoDB支持master-slave,replicaset(內(nèi)部采用paxos選舉算法,自動故障恢復(fù)),auto sharding機制兔院,對客戶端屏蔽了故障轉(zhuǎn)移和切分機制殖卑。

5、可靠性(持久化)

對于數(shù)據(jù)持久化和數(shù)據(jù)恢復(fù)坊萝,

redis支持(快照孵稽、AOF):依賴快照進行持久化,aof增強了可靠性的同時十偶,對性能有所影響

memcache不支持菩鲜,通常用在做緩存,提升性能;

MongoDB從1.8版本開始采用binlog方式支持持久化的可靠性

6惦积、數(shù)據(jù)一致性(事務(wù)支持)

Memcache 在并發(fā)場景下接校,用cas保證一致性

redis事務(wù)支持比較弱,只能保證事務(wù)中的每個操作連續(xù)執(zhí)行

mongoDB不支持事務(wù)

7狮崩、數(shù)據(jù)分析

mongoDB內(nèi)置了數(shù)據(jù)分析的功能(mapreduce),其他不支持

8蛛勉、應(yīng)用場景

redis:數(shù)據(jù)量較小的更性能操作和運算上

memcache:用于在動態(tài)系統(tǒng)中減少數(shù)據(jù)庫負(fù)載,提升性能;做緩存厉亏,提高性能(適合讀多寫少董习,對于數(shù)據(jù)量比較大,可以采用sharding)

MongoDB:主要解決海量數(shù)據(jù)的訪問效率問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爱只,一起剝皮案震驚了整個濱河市皿淋,隨后出現(xiàn)的幾起案子招刹,更是在濱河造成了極大的恐慌,老刑警劉巖窝趣,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疯暑,死亡現(xiàn)場離奇詭異,居然都是意外死亡哑舒,警方通過查閱死者的電腦和手機妇拯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洗鸵,“玉大人越锈,你說我怎么就攤上這事”毂酰” “怎么了甘凭?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長火邓。 經(jīng)常有香客問我丹弱,道長,這世上最難降的妖魔是什么铲咨? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任躲胳,我火速辦了婚禮,結(jié)果婚禮上纤勒,老公的妹妹穿的比我還像新娘坯苹。我一直安慰自己,他們只是感情好摇天,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布北滥。 她就那樣靜靜地躺著,像睡著了一般闸翅。 火紅的嫁衣襯著肌膚如雪再芋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天坚冀,我揣著相機與錄音济赎,去河邊找鬼。 笑死记某,一個胖子當(dāng)著我的面吹牛司训,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播液南,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼壳猜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滑凉?” 一聲冷哼從身側(cè)響起统扳,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喘帚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咒钟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吹由,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年朱嘴,在試婚紗的時候發(fā)現(xiàn)自己被綠了倾鲫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡萍嬉,死狀恐怖乌昔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壤追,我是刑警寧澤玫荣,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站大诸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贯卦。R本人自食惡果不足惜资柔,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撵割。 院中可真熱鬧贿堰,春花似錦、人聲如沸啡彬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庶灿。三九已至纵搁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間往踢,已是汗流浹背腾誉。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留峻呕,地道東北人利职。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像瘦癌,于是被迫代替她去往敵國和親猪贪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容