1. 程式人生 > >Redis 和 MongoDB 的優缺點

Redis 和 MongoDB 的優缺點

auto 在線擴容 tle mysq sha 能夠 註意 前端 運維人員

MongoDB 和 Redis 都是 NoSQL,采用結構型數據存儲。二者在使用場景中,存在一定的區別, 這也主要由於二者在內存映射的處理過程,持久化的處理方法不同。MongoDB 建議集群部署,更多的考慮到集群方案,Redis 更偏重於進程順序寫入,雖然支持集群,也僅限於主-從模式。

Redis

優點:

1、讀寫性能優異
2、支持數據持久化,支持 AOF 和 RDB 兩種持久化方式 3、支持主從復制,主機會自動將數據同步到從機,可以進行讀寫分離。
4、數據結構豐富:數據結構豐富:支持 string、hash、set、sortedset、list 等數據結構。

缺點:

1、Redis 不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的 IP 才能恢復。 2、 主機宕機,宕機前有部分數據未能及時同步到從機,切換 IP 後還會引入數據不一致的問題,降低了系統的可用性。 3、Redis 的主從復制采用全量復制,復制過程中主機會 fork 出一個子進程對內存做一份快照, 並將子進程的內存快照保存為文件發送給從機,這一過程需要確保主機有足夠多的空余內存。若快照文件較大,對集群的服務能力會產生較大的影響,而且復制過程是在從機新加入 集群或者從機和主機網絡斷開重連時都會進行,也就是網絡波動都會造成主機和從機間的一 次全量的數據復制,這對實際的系統運營造成了不小的麻煩。 4、 Redis 較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜。為避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源造成了很大的浪費。

MongoDB

優點:

1、弱一致性(最終一致),更能保證用戶的訪問速度

2、文檔結構的存儲方式,能夠更便捷的獲取數
3、內置 GridFS,高效存儲二進制大對象 (比如照片和視頻)

4、內置Sharding。提供基於Range的Auto Sharding機制:一個collection可按照記錄的範圍,分成若幹個段,切分到不同的Shard上。

5、第三方支持豐富。(這是與其他的NoSQL相比,MongoDB也具有的優勢)

6、性能優越:在使用場合下,千萬級別的文檔對象,近10G的數據,對有索引的ID的查詢不會比mysql慢,而對非索引字段的查詢,則是全面勝出。

缺點:

1、mongodb不支持事務操作。所以事務要求嚴格的系統(如果銀行系統)肯定不能用它。(這點和優點①是對應的) 2、mongodb占用空間過大。
3、MongoDB沒有如MySQL那樣成熟的維護工具,這對於開發和IT運營都是個值得註意的地方。

Redis 和 MongoDB 的優缺點