2012-10-23 37 views
1

我想了解mongo的內部緩存是如何工作的,以及它是否消除了使用memcache。我們的數據庫大小大約爲200G,索引適合內存,但在索引之後,服務器上留下的空閒內存不多。在mongodb服務器的infront使用memcache

我的一位同事說mongo的內部緩存速度與memcache一樣快,所以不需要通過使用memcache來引入另一個級別的複雜性。

我腦海中的場景是當我們從db讀取數據時,它保存在memcache中,下次直接從緩存中讀取而不是返回到db服務器。如果數據發生更改並需要保存/更新,則在memcache服務器和數據庫服務器上完成。

我一直在閱讀這方面的內容,但還是無法說服自己。所以我非常感謝,如果有人能夠闡明這一點。

+1

這取決於你的工作集大小,如果剩下的ram很適合工作集,那麼額外的層可能是不必要的複雜性。 – Sammaye

回答

1

首先,緩存存儲與數據庫不同。因此,與Memcache相比,MongoDB和SQL在用途和使用方面有所不同。

Memcache非常適合降低查詢的工作集大小。例如:設想一個巨大的帶有子查詢和CASE語句的聚合查詢,以及SQL中沒有的東西(想想最複雜的查詢可以),實時執行此查詢可能會導致計算機「捶打」(而不是提到客戶端的問題)。

然而,衆所周知,只需要將此查詢彙總到另一個集合/表中,以便立即加快速度。內存緩存的真實速度來自於它是內存中的關鍵值存儲。這是MongoDB在速度上可能出現故障的地方,因爲它不是存儲器,它是存儲器映射的,但沒有存儲。

MongoDB沒有自我緩存,提供的查詢是「熱」,並在LRU(這是你的工作集進來),你不應該注意到在響應時間差異很大。確保查詢「熱」的一個好方法是運行它。有些人使用他們最大的查詢腳本來預熱緩存。

正如我所說的內存緩存是一個緩存層,這是爲什麼:

如果數據發生變化,需要保存/更新,它的兩個內存緩存服務器和數據庫服務器上完成。

讓我有點內心死亡。許多模糊DB和緩存層之間的界限。