我無法回答Redis,因爲我不使用它,從來沒有,所以我不會假裝我有。
但是,如果由於某種原因,您沒有使用像Facebook那樣的XMPP客戶端:http://www.ibm.com/developerworks/xml/tutorials/x-realtimeXMPPtut/section3.html(又名Jabber)進行聊天,那麼我將在這種情況下描述一個純粹的MongoDB解決方案。
MongoDB使用操作系統的'LRU作爲緩存文檔和查詢的手段,足夠公平的提供沒有直接的查詢緩存但是如果你很聰明,你不會需要一個;而是直接從RAM中讀取所有查詢。考慮到這一點,MongoDB 可以與Redis一樣快,因爲Redis也使用計算機RAM。
在優化查詢上兩者之間的速度可以忽略不計,我會想。速度的真正衡量來自您的模式,索引,羣集設置和您執行的查詢。
關於存儲大小的說明這裏,把你的意見考慮在內:
與沖洗MongoDB的問題比我最初雖然更大:顯然,當你刪除蒙戈東西,你只能刪除其引用,所以如果你刪除了4MB的文件,它不會釋放那麼多的空間。實際上騰出內存是運行DBREPAIR(或這條線中的東西)的唯一途徑運行基本塊分貝,而....
你似乎有關於MongoDB的究竟是如何工作的一些誤解。
這個鏈接對你有幫助:http://www.10gen.com/presentations/storage-engine-internals它將描述使用過多磁盤空間的一些原因,也將解釋你對計算機工作原理以及MongoDB如何釋放空間和重用它的一些誤解。
MongoDB不會釋放記錄級別的空間。相反,它會發送該「空」記錄(記錄和文檔是演示文稿告訴你的兩個不同的東西),將其推入已刪除的存儲桶列表,然後在新文檔(或已更新的文檔已移動)隨之而來,適合於這個空間。
確實,如果您對MongoDB在這個級別上的工作方式不太認真和理解,您可能會被迫定期運行repairDB
以保持碎片之後的任何性能。
至於內存處理。正如我所說的,操作系統處理這個。當操作系統將釋放內存的一個很好的解釋是維基百科:http://en.wikipedia.org/wiki/Paging
直到有沒有足夠的內存來存儲所有需要的數據,獲得空頁幀的過程不涉及從RAM取出另一頁。
因此,操作系統將爲您處理刪除頁面,您不應該關注那個部分,而應該關注如何使您的工作集適合RAM。
如果您擔心存儲郵件並且並不真正想要,也就是說您希望它們被「刷新」,您實際上可以使用隨後的MongoDB安裝附帶的TTL功能:http://docs.mongodb.org/manual/tutorial/expire-data/這基本上允許您設置應該從集合中刪除消息的超時時間。
因此,如果設置正確的話,MongoDB可以像Facebook一樣進行消息傳遞和聊天,當然他們會使用XMPP協議,然後將消息歸檔到Cassandra進行搜索,但是您不必像他們那樣去做,這只是實現相同目標的一種方式。
希望這是有道理的,我沒有圍繞圈子,這是一個長的答案。
與沖洗MongoDB的問題是大於我最初雖然:顯然,當你刪除蒙戈只刪除其引用,因此,如果您刪除文件4MB的東西,它不會騰出很大的空間。只有這樣,才能真正釋放內存是運行DBREPAIR(或這條線之間的東西),基本上阻止分貝,而在另一方面運行.... –
,我無法跟蹤對Redis的已讀郵件,因爲如它運行在內存,它不應該無限期地增長,但有一個可預見的大小 –
@johnsmith右鍵 - 你必須做出更重要的是,或定製滿足您獨特的系統都要求的解決方案設計決策。 – PinkElephantsOnParade