2016-08-23 43 views
0

我有一個文檔在數組中的某些字段中包含大數據結構,由於頻繁點擊以讀取此類數據,它正在放慢我的應用程序。我想在幾個解決方案來實現,但我需要的意見之前,我進行,甚至可能是更好的解決方案,這裏有我的想法/問題:對於大型文檔的mongodb性能

  1. 將幫助它來緩存數據?
  2. 我應該使用memcached還是redis作爲緩存引擎?爲什麼?
  3. 它可以幫助從本文檔讀取單個字段而不是每次都讀取它?
  4. 我應該做點別的嗎?!

回答

0

緩存會幫助,因爲它會避免你的數據庫被過於頻繁

打的Memcache或Redis的就看你。我prefere redis,但如果你已經有一個memcache它沒問題。

如果你有一個服務器集羣,認爲如果你需要一個集中的緩存或不

緩存完整的文檔不會爲獲得單場幫助,因爲你緩存查詢的結果,不知道是什麼包含的內容。

0

你的問題需要更多的澄清。例如,你說的數據有多大是幾兆字節還是千兆字節。所有這些因素改變了解決方案。但是,如果我們認爲你有幾兆字節,並且每當最佳解決方案緩存時都想阻止調用數據庫。如何選擇緩存也完全取決於你的情況。如果您的Web應用程序在一臺服務器上運行,則可以使用內存緩存,如ASP.Net緩存,這對於內存緩存非常快速和快速。此緩存存儲在堆中,因此您可以將所有對象放入緩存中而無需序列化。但請考慮每當您的應用程序像大多數部署一樣重新啓動時。您的堆將被刪除,並且堆內的所有緩存都將被清除。

如果您有多個服務器,那麼您可以開始考慮內存不足的緩存,因爲兩臺服務器不共享堆內存,並且使用所有內存緩存都無用,因爲它會複製數據並使其無效惡夢。但是,這是更可靠的緩存,而不在堆中,並且持久性遠遠超過內存緩存。但是當你通過網絡連接傳輸對象時,無論你想放入這種緩存,都應該可以串行化。所以你不能把你的所有對象放入緩存中。 Redis和memcached都可以用於此目的。 Redis比Memcached功能更復雜,但爲了您的目的,memcached相當不錯。

無論您選擇哪種緩存系統,都應該從廣泛的角度來處理它。在您的應用程序中設計一個緩存系統,但隨着時間的推移,您需要將更多東西放入緩存中。所以從現在開始準備好一切。另一件在緩存中非常重要的事情是,只要你在緩存中設置了某些東西,你就必須考慮何時會使其無效。

0

緩存是否有幫助取決於文檔的加入。如果多次訪問文檔,由於MongoDB對內存緩存的實際工作方式,緩存將無濟於事。

首先,您需要了解您的數據加入模式。

相關問題