項目中用的是MongoDB,但是為什么用其實當時選型的時候也沒有太多考慮,只是認為數據量比較大,所以采用MongoDB。
最近又想起為什么用MongoDB,就查閱一下,匯總匯總:
之前也用過redis,當時是用來存儲一些熱數據,量也不大,但是操作很頻繁。現在項目中用的是MongoDB,目前是百萬級的數據,將來會有千萬級、億級。
就Redis和MongoDB來說,大家一般稱之為Redis緩存、MongoDB數據庫。這也是有道有理有根據的,
Redis主要把數據存儲在內存中,其“緩存”的性質遠大於其“數據存儲“的性質,其中數據的增刪改查也只是像變量操作一樣簡單;
MongoDB卻是一個“存儲數據”的系統,增刪改查可以添加很多條件,就像SQL數據庫一樣靈活,這一點在面試的時候很受用。
點擊查看:MongoDB語法與現有關系型數據庫SQL語法比較
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位系統(32位有最大2.5G文件限制,64位沒有改限制) | Redis2.0后增加虛擬內存特性,突破物理內存限制;數據可以設置時效性,類似於memcache | 不同的應用角度看,各有優勢 |
可用性 | 支持master-slave,replicaset(內部采用paxos選舉算法,自動故障恢復),auto sharding機制,對客戶端屏蔽了故障轉移和切分機制 | 依賴客戶端來實現分布式讀寫;主從復制時,每次從節點重新連接主節點都要依賴整個快照,無增量復制;不支持自動sharding,需要依賴程序設定一致hash機制 | MongoDB優於Redis;單點問題上,MongoDB應用簡單,相對用戶透明,Redis比較復雜,需要客戶端主動解決。(MongoDB 一般會使用replica sets和sharding功能結合,replica sets側重高可用性及高可靠性,而sharding側重於性能、易擴展) |
可靠性 | 從1.8版本后,采用binlog方式(MySQL同樣采用該方式)支持持久化,增加可靠性 | 依賴快照進行持久化;AOF增強可靠性;增強可靠性的同時,影響訪問性能 | MongoDB優於Redis |
一致性 | 不支持事物,靠客戶端自身保證 | 支持事物,比較弱,僅能保證事物中的操作按順序執行 | Redis優於MongoDB |
數據分析 | 內置數據分析功能(mapreduce) | 不支持 | MongoDB優於Redis |
應用場景 | 海量數據的訪問效率提升 | 較小數據量的性能及運算 | MongoDB優於Redis |