標籤:語言 項目 缺點 比較 bsp 關係型資料庫 事務 virt 機制
mongodb和memcached不是一個範疇內的東西。mongodb是文檔型的非關係型資料庫,其優勢在於查詢功能比較強大,能儲存海量資料。mongodb和memcached不存在誰替換誰的問題。
和memcached更為接近的是redis。它們都是記憶體型資料庫,資料儲存在記憶體中,通過tcp直接存取,優勢是速度快,並發高,缺點是資料類型有限,查詢功能不強,一般用作緩衝。在我們團隊的項目中,一開始用的是memcached,後來用redis替代。
相比memcached:
1、redis具有持久化機制,可以定期將記憶體中的資料持久化到硬碟上。
2、redis具備binlog功能,可以將所有操作寫入日誌,當redis出現故障,可依照binlog進行資料恢複。
3、redis支援virtual memory,可以限定記憶體使用量大小,當資料超過閾值,則通過類似LRU的演算法把記憶體中的最不常用資料儲存到硬碟的分頁檔中。
4、redis原生支援的資料類型更多,使用的想象空間更大。
5、前面有位朋友所提及的一致性雜湊,用在redis的sharding中,一般是在負載非常高需要水平擴充時使用。我們還沒有用到這方面的功能,一般的項目,單機足夠支撐並發了。redis 3.0將推出cluster,功能更加強大。
6. 效能
Redis作者的說法是平均到單個核上的效能,在單條資料不大的情況下Redis更好。為什麼這麼說呢,理由就是Redis是單線程啟動並執行。
因為是單線程運行,所以和Memcached的多線程相比,整體效能肯定會偏低。
因為是單線程運行,所以IO是序列化的,網路IO和記憶體IO,因此當單條資料太大時,由於需要等待一個命令的所有IO完成才能進行後續的命令,所以效能會受影響。
簡介
MongoDB更類似Mysql,支援欄位索引、遊標操作,其優勢在於查詢功能比較強大,擅長查詢JSON資料,能儲存海量資料,但是不支援事務。
Mysql在大資料量時效率顯著下降,MongoDB更多時候作為關聯式資料庫的一種替代。
記憶體管理機制
Redis資料全部存在記憶體,定期寫入磁碟,當記憶體不夠時,可以選擇指定的LRU演算法刪除資料。
MongoDB資料存在記憶體,由linux系統mmap實現,當記憶體不夠時,只將熱點資料放入記憶體,其他資料存在磁碟。
支援的資料結構
Redis支援的資料結構豐富,包括hash、set、list等。
MongoDB資料結構比較單一,但是支援豐富的資料表達,索引,最類似關係型資料庫,支援的查詢語言非常豐富。
效能
二者效能都比較高,應該說都不會是瓶頸。
可靠性
二者均支援持久化。
叢集
MongoDB叢集技術比較成熟,Redis從3.0開始支援叢集。
不適用情境
? 需要使用複雜sql的操作
? 事務性系統
Memcached, Redis, MongoDB區別