MongoDB和Redis區別
阿新 • • 發佈:2017-06-22
一定的 虛擬 數據結構 提升 b數 技術 處理 aof memcach
簡介
MongoDB更類似MySQL,支持字段索引、遊標操作,其優勢在於查詢功能比較強大,擅長查詢JSON數據,能存儲海量數據,但是不支持事務。
mysql在大數據量時效率顯著下降,mongodb更多時候作為關系數據庫的一種替代。
內存管理機制
Redis數據全部存在內存,定期寫入磁盤,當內存不夠時,可以選擇指定的LRU算法刪除數據。
MongoDB數據存在內存,由Linux系統mmap實現,當內存不夠時,只將熱點數據放入內存,其他數據存在磁盤。
支持的數據結構
redis支持的數據結構豐富,包括hash、set、list等。
MongoDB數據結構比較單一,但是支持豐富的數據表達,索引,最類似關系型數據庫,支持的查詢語言非常豐富。
性能
二者性能都比較高,應該說都不會是瓶頸。
可靠性
二者均支持持久化。
集群
MongoDB集群技術比較成熟,Redis從3.0開始支持集群。
不適用場景
? 需要使用復雜sql的操作
? 事務性系統
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 |
MongoDB和Redis區別