noSql之間的對比

關(guān)于redis、memcache、mongoDB

1.性能

都比較高,性能對我們來說應(yīng)該都不是瓶頸。
總體來說,TPS方面redis和memcache差不多,要大于mongoDB。

2.操作的便利性

memcache的數(shù)據(jù)結(jié)構(gòu)單一。(key-value)
redis豐富一些,數(shù)據(jù)操作方面,redis更好一些,較少的網(wǎng)絡(luò)IO次數(shù),同時還提供list,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。
mongodb支持豐富的數(shù)據(jù)表達(dá),索引,最類似關(guān)系型數(shù)據(jù)庫,支持的查詢語言非常豐富。

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

redis在2.0版本后增加了自己的VM特性,突破物理內(nèi)存的限制;可以對key value設(shè)置過期時間(類似memcache)
memcahce可以修改最大可用內(nèi)存,采用LRU算法。memcahce代理軟件magent,比如建立10臺4G的memcache集群,就相當(dāng)于有了40G。magent -s 10.1.2.1 -s 10.1.2.2:11211 -b
10.1.2.3:14000
mongoDB 適合大數(shù)據(jù)量的存儲,依賴操作系統(tǒng)VM做內(nèi)存管理,吃內(nèi)存也比較厲害。服務(wù)不要和別的服務(wù)在一起。

4.可用性(單點問題)

redis,依賴客戶端來實現(xiàn)分布式讀寫;主從復(fù)制時,每次從節(jié)點重新連接主節(jié)點都要依賴整個快照,無增量復(fù)制,因性能和效率問題,所以單點問題比較復(fù)雜;不支持自動sharding,需要依賴程序設(shè)定一致hash機(jī)制。一種替代方案是,不用redis本身的復(fù)制機(jī)制,采用自己做主動復(fù)制(多份存儲),或者改成增量復(fù)制的方式(需要自己實現(xiàn)),一致性問題和性能的權(quán)衡。
memcache本身沒有數(shù)據(jù)冗余機(jī)制,也沒必要;對應(yīng)故障預(yù)防,采用依賴成熟的hash或者環(huán)狀的算法,解決單點故障引起的抖動問題。
mongodb支持master-slave,replicaset(內(nèi)部采用選舉算法,自動故障恢復(fù)),auto sharding機(jī)制,對客戶端屏蔽了故障轉(zhuǎn)移和切分機(jī)制。

5.可靠性(持久化)

對于數(shù)據(jù)持久化和數(shù)據(jù)恢復(fù)
redis支持(快照、AOF):依賴快照進(jìn)行持久化,aof增強(qiáng)了可靠性的同時,對性能有所影響;
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ù)量較小的更性能操作和運(yùn)算上
memcache:用于在動態(tài)系統(tǒng)中減少數(shù)據(jù)庫負(fù)載,提升性能;做緩存,提高性能(適合讀多寫小,對于數(shù)據(jù)量比較大,可以用sharding)
mongodb:主要解決海量數(shù)據(jù)的訪問效率問題。
對比參數(shù) memcache redis mongodb
數(shù)據(jù)庫類型 純粹的key-value數(shù)據(jù)庫,數(shù)據(jù)結(jié)構(gòu)單一 結(jié)構(gòu)化數(shù)據(jù)庫 對象數(shù)據(jù)庫
支持?jǐn)?shù)據(jù)類型 string string,list,sort,sorted,hash 豐富的數(shù)據(jù)表達(dá) 索引,類似于關(guān)系型數(shù)據(jù)庫
可用性 沒有數(shù)據(jù)冗余機(jī)制,使用一致性hash增加可用性 支持ms,mss結(jié)構(gòu),slave重連主節(jié)點會導(dǎo)致一次全量同步產(chǎn)生,影響性能和效率。可以實現(xiàn)讀寫分離,slave重連使用全量數(shù)據(jù),性能和效率會有問題,不支持自動sharding,需要程序上實現(xiàn)一致性hash 支持ms,支持replication set,set可以自動故障轉(zhuǎn)換,支持autosharding
持久化支持 數(shù)據(jù)完全放在內(nèi)存中,沒有持久化支持 支持持久化,快照持久化和aof持久化 1.8版本開始采用binlog方式支持持久化的可靠性
內(nèi)存空間優(yōu)化 最大內(nèi)存限制,LRU算法淘汰(可選) 獨立的vm機(jī)制,最大內(nèi)存限制,數(shù)據(jù)ttl過期設(shè)置,內(nèi)存淘汰(可選) 依賴于操作系統(tǒng)的vm管理機(jī)制,使用內(nèi)存映射文件,把剩余內(nèi)存作為緩存使用,沒有最大內(nèi)存限制,數(shù)據(jù)存在文件系統(tǒng)上和內(nèi)存
是否多線程 是,可以通過-t控制進(jìn)線程數(shù) 單線程 多線程
性能 15W/s的GET,11W/s的SET 單個實例qps:8.5W左右(GET/SET)(RH2285) 單個qps:3.5W左右(GET/SET)(RH2285)
事務(wù)支持 并發(fā)場景下,用cas保證一致性 事務(wù)支持比較弱,保證每個事務(wù)操作連續(xù)執(zhí)行,如果一個操作失敗,不會回滾。使用樂觀鎖實現(xiàn)cas。 不支持事務(wù)
數(shù)據(jù)分析 簡單的get查詢功能 簡單查詢功能,支持對集合和hash的操作等 查詢方便,有類似于sql的語法,支持條件查詢
應(yīng)用場景 常作為前端緩存 緩存和數(shù)據(jù)存儲,隊列 大數(shù)據(jù)量存儲
特點 - 支持使用pipeline減少查詢次數(shù) auto sharding,故障自動切換,mapreduce支持,大文件下的GridFs文件系統(tǒng)
安全問題 目前沒有身份驗證 支持密碼驗證(requirepass) 支持collection級別的身份驗證(auth)
數(shù)據(jù)備份和還原 數(shù)據(jù)存放于內(nèi)存中,不方便備份和還原(stats cachedump) 可以使用持久化做備份和還原 mongodump倍份,mogorestore還原。數(shù)據(jù)導(dǎo)出:mongoexport,mongoimport,導(dǎo)出數(shù)據(jù)支持csv格式
slowlog相關(guān) 沒有slowlog相關(guān)的設(shè)置 支持slowlog,slowlog存在于數(shù)據(jù)庫中,使用slowlog get獲取相關(guān)日志,slowlog的大小有限制,超過后會刪除舊的 支持slowlog(profiling),slowlog存在于system.profile(capped collection)的collection中
狀態(tài)查看 stats info mongostat,db.serverStatus(),db.stats(),rs.statsu()等
tunning 1.object size不要太大(默認(rèn)只支持1M)2.object 的expires設(shè)置(緩存應(yīng)該具有超時的特點)3.適合數(shù)據(jù)處理后的緩存,不適合緩存后的處理輸出 1.開啟vm,將不常用的value值給交換到磁盤上 2.盡量將數(shù)據(jù)存放在內(nèi)存中 3.前端使用proxy或persistence hash來實現(xiàn)均衡訪問 4.使用master-slave結(jié)構(gòu),做讀寫分離 5.大數(shù)據(jù)量時持久化數(shù)據(jù)dump時影響服務(wù),應(yīng)該放在slave端做6.使用pipeline聚合訪問7.網(wǎng)卡bonding 1.索引相關(guān)(讀多寫少時) 2.explain解析查詢 3.限定返回條目(limit) 4.只查看指定需要字段,不查詢所有字段 5.使用capped collection (特殊業(yè)務(wù))6.使用replsets,擴(kuò)展整體集群能力
  1. 類型——memcacheheredis都是將數(shù)據(jù)存放在內(nèi)存,所以是內(nèi)存數(shù)據(jù)庫。當(dāng)然,memcache也可用于緩存其他東西,例如圖片等等。
  2. 數(shù)據(jù)類型——Memcache 在添加數(shù)據(jù)時就要指定數(shù)據(jù)的字節(jié)長度,而 redis 不需要。
  3. 虛擬內(nèi)存——當(dāng)物理內(nèi)存用完時,可以將一些很久沒用到的 value 交換到磁盤。
  4. 過期策略——memcache 在 set 時就指定,例如 set key1 0 0 8,即永不過期。Redis 可以通過例如 expire 設(shè)定,例如 expire name 10。
  5. 分布式——設(shè)定 memcache 集群,利用 magent 做一主從;redis可以做一主多從。都可以一主一從。
  6. 存儲數(shù)據(jù)安全——memcache 斷電就斷了,數(shù)據(jù)沒了;redis 可以定期 save 到磁盤。
  7. 災(zāi)難恢復(fù)——memcache 同上,redis 丟了后可以通過 aof 恢復(fù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,234評論 2 375

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