2010-05-13 66 views
3

我剛想到爲什麼在應用程序啓動時沒有將大部分對象放在緩存(內存)中。保存數據庫中緩存/內存中的大部分對象?

如果它不是那麼大的web應用程序。或者要設置多少我想要放入緩存/內存。

我只是猜測它可能需要具有低於1 GB RAM或更少的東西。

一切都爲了加快應用程序,甚至通過不查詢數據庫。

這是個好主意嗎?

+0

這是一個非常開放的問題。取決於您的特定要求,這是否是一個好主意會有很大差異。重要的因素包括:是否只有單個應用程序服務器或整個羣集,數據是否經常更改,是否可以接受過時的數據等等。 – meriton 2010-05-13 15:37:15

+0

我只有一個數據庫,它的應用程序相對較小。數據不會經常更改。但陳舊的數據是不可接受的。 – feiroox 2010-05-13 15:46:08

回答

1

緩存絕對是一個好主意,並被廣泛使用,但必須正確實施。如果做得不對,有很多缺陷。嘗試尋找一個大的成熟系統,如memcached

0

當其他節點開始更新數據庫時,快速變爲Not so good idea

在這種情況下,您的緩存將持有陳舊的數據。

+0

複製與DB存儲在內存或磁盤中的事實完全沒有關係。您可以使用內存數據庫在多臺計算機上覆制內存數據庫。而複製問題與數據庫在磁盤上時完全相同。 – SyntaxT3rr0r 2010-05-13 15:48:01

0

您可以在內存中維護常用對象的緩存,只要不要忘記在底層數據庫狀態更改時添加方法來刷新緩存。例如:如果你有一個用戶的表,並且你需要很多頁面中的用戶名,那麼在應用程序啓動時將整個表加載到緩存中,只需確保在你在線添加新用戶時更新緩存或修改/刪除用戶表中的條目

0

您不會將對象保存到數據庫中。你堅持的是對象的狀態。這樣,即使在您的應用程序停止/關閉/重新啓動後,您也可以擁有完全相同的狀態。如果你想保持你的對象的狀態不變,你別無選擇,只能使用db(或其他任何可以將數據寫入文件系統的東西)。

+0

是的,我不想完全繞過數據庫。一點也不。 – feiroox 2010-05-13 15:40:57

1

緩存絕對是一個好主意。

數據庫也不是一個全面的解決方案,儘管您必須注意程序運行之間的一致性。如果更改數據但在程序更新到數據庫之前崩潰,該怎麼辦?

也有輕量級的內存駐留數據庫,可以讓你現在保留當前的查詢,但從內存中運行很多東西。由於交換機幾乎是透明的,因此使用ORM工具而不是SQL對此特別有效。

0

的細節不在這裏回答的範圍,但是我們不得不使用的Ehcache(http://ehcache.org/

的支持分佈式緩存的結合,並溢出到磁盤的好經驗,使我們能夠保持大量的計算量很大,但緩存中的頁面數量相當穩定,可以爲多個tomcats提供服務。

分配解決了過時問題(如果您正確地使項目無效),並且磁盤溢出允許我們基本緩存一切對於內存中緩存不可行的內容。

當然,對於真實世界的應用來說,實現並不是微不足道的,但是一旦緩存冒泡,它的性能顯着提高。