1. 程式人生 > >MongoDB與Redis的比較

MongoDB與Redis的比較

slave blog 能夠 div 事情 mongo 查詢 持久 table

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的比較