MongoDB與Redis的比較
MongoDB和Redis都是NoSQL,采用結構型數據存儲。二者在使用場景中,存在一定的區別,這也主要由於二者在內存映射的處理過程,持久化的處理方法不同。
MongoDB建議集群部署,更多的考慮到集群方案,Redis更偏重於進程順序寫入,雖然支持集群,也僅限於主-從模式。
比較指標 | MongoDB(v2.4.9) | Redis(v2.4.17) | 比較說明 |
實現語言 | c++ | c/c++ | - |
協議 | BSON,自定義二進制 | 類telnet | - |
性能 | 依賴內存,TPS較高 | 依賴內存,TPS非常高 | Redis優於MongoDB |
可操作性 | 豐富的數據表達,索引;最類似於關系型數據庫,支持豐富的查詢語句 | 數據豐富,較少的IO | MongoDB優於Redis |
內存及存儲 | 適合大數據量存儲,依賴系統虛擬內存,采用鏡像文件存儲;內存占用率比較高,官方建議獨立部署在64位系統 | Redis2.0後支持虛擬內存特性(VM) 突破物理內存限制;數據可以設置時效性,類似於memcache | 不同的應用場景,各有千秋 |
可用性 | 支持master-slave,replicatset(內部采用paxos選舉算法,自動故障恢復),auto sharding機制,對客戶端屏蔽了故障轉移和切片機制 | 依賴客戶端來實現分布式讀寫;主從復制時,每次從節點重新連接主節點都要依賴整個快照,無增量復制;不支持auto sharding,需要依賴程序設定一致性hash機制 | MongoDB優於Redis;單點問題上,MongoDB應用簡單,相對用戶透明,Redis比較復雜,需要客戶端主動解決.(MongoDB一般使用replicasets和sharding相結合,replicasets側重高可用性以及高可靠,sharding側重性能,水平擴展) |
可靠性 | 從1.8版本後,采用binlog方式(類似Mysql) 支持持久化 | 依賴快照進行持久化;AOF增強可靠性;增強性的同時,影響訪問性能 |
|
一致性 | 不支持事務,靠客戶端保證 | 支持事務,比較脆,僅能保證事務中的操作按順序執行 | Redis優於MongoDB |
數據分析 | 內置數據分析功能(mapreduce) | 不支持 | MongoDB優於Redis |
應用場景 | 海量數據的訪問效率提升 | 較小數據量的性能和運算 | MongoDB優於Redis |
分類: Redis
http://www.cnblogs.com/chinesern/p/5581422.html
1\redis和mongodb,mysql
Redis是完全在內存中保存數據的數據庫,使用磁盤只是為了持久性目的,Redis數據全部存在內存,定期寫入磁盤,當內存不夠時,可以選擇指定的LRU算法刪除數據,持久化是使用RDB方式或者aof方式。
mongodb是文檔型的非關系型數據庫,MongoDB更類似MySQL,支持字段索引、遊標操作,其優勢在於查詢功能比較強大,擅長查詢JSON數據,能存儲海量數據,但是不支持事務。
mongodb的所有數據實際上是存放在硬盤的,所有要操作的數據通過mmap的方式映射到內存某個區域內。
然後,mongodb就在這塊區域裏面進行數據修改,避免了零碎的硬盤操作。
至於mmap上的內容flush到硬盤就是操作系統的事情了,所以,如果,mongodb在內存中修改了數據後,mmap數據flush到硬盤之前,系統宕機了,數據就會丟失。
mysql:
無論數據還是索引都存放在硬盤中。到要使用的時候才交換到內存中。能夠處理遠超過內存總量的數據。
數據量和性能:
當物理內存夠用的時候,redis>mongodb>mysql
當物理內存不夠用的時候,redis和mongodb都會使用虛擬內存。
實際上如果redis要開始虛擬內存,那很明顯要麽加內存條,要麽你換個數據庫了。
但是,mongodb不一樣,只要,業務上能保證,冷熱數據的讀寫比,使得熱數據在物理內存中,mmap的交換較少。
mongodb還是能夠保證性能。有人使用mongodb存儲了上T的數據。
mysql,mysql根本就不需要擔心數據量跟內存的關系。
Redis 事務支持比較弱,只能保證事務中的每個操作連續執行
mongodb不支持事務
MongoDB 內置了數據分析的功能(mapreduce),Redis不支持
Redis只能使用單線程,性能受限於CPU性能
MongoDB與Redis的比較