2010-11-25 53 views

回答

54

使用內存緩存的概念從你有想法源於「額外內存「坐在某處。 MongoDB和MySQL(以及大多數數據庫)都會佔用每一個他們可以獲得的RAM。

對於非常常見的MySQL/Memcache,有很好的文檔記載,使用Memcache更多的是減少服務器上的查詢負載,而不是加快查詢速度。一個好的內存緩存實現基本上只是試圖將最常見的數據保存在內存中,這樣數據庫服務器就可以在更大的內存上流失。

事實上,這是我的經驗是使用內存緩存的通常成爲依賴內存緩存以保持系統性能。

回到原來的問題,你在哪裏有額外的RAM?

如果您在Web服務器上有額外的RAM,則可能可以使用Memcache。當然,你也可以在Web服務器上本地運行Mongo。只需要從主服務器上獲取所需的數據。

如果您在其他計算機上有額外的RAM,那麼使用memcache並沒有什麼意義。只需將更多節點添加到MongoDB副本集或分片。這是MongoDB實際照耀的地方。由於分片/複製,您可以向Mongo Horizo​​ntally添加更多RAM以提高性能。有了SQL,「添加更多服務器」非常困難,因爲連接不能很好地擴展。但是對於Mongo來說,僅僅爲一個問題添加更多的節點是完全可能的。

3

起初沒有。如果稍後遇到性能問題,請添加緩存層(memcache)。但是,如果您要使用Redis,則無法獲取任何內容,因爲Redis已將所有內容存儲在內存中。

11

MongoDB無論如何都將所有東西都存儲在內存中,並且以類似的方式工作,這是一個基於鍵值的系統,但是我相信MongoDB更靈活,因爲它允許在內部存儲BSON對象。

(只是爲了澄清,MongoDB使用BSON,JSON的一種特殊形式,用於存儲的所有數據,包括對象中的對象。)

+3

該功能讓我更喜歡mongoDB比其他鍵值數據庫:) – 2010-11-25 14:21:21

0

答案取決於您的使用情況。
通常,訪問RAM比訪問磁盤快幾個數量級。
即使是最快的SSD驅動器,其訪問速度也要比RAM慢100倍。

現在,我不知道Mongo是否有一個緩存系統(最有可能),或驅逐策略是什麼,但作爲一個程序員,我更喜歡一個緩存,我可以存儲/檢索和刪除物品隨意。因此,我寧願使用Mongo的緩存解決方案。

總之,它確實取決於您使用這些解決方案。沒有一個答案涵蓋所有可能的用途。