標籤:c/c++   影響   版本   hash   sha   存在   記憶體   欄位   ase   
簡介
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區別