2013-01-17 95 views
1

我們有一個基於java的產品,它將數據庫中的Calculation對象保存爲blob。在運行期間,我們將其保存在內存中以實現快速性現在有另一個過程以定期的間隔更新數據庫中的這個計算對象。現在,實現這個最好的策略是什麼,以便當這個對象在數據庫中被更新時,緩存將刪除存儲的對象並從數據庫中再次獲取它。使用db更改的緩存更新

我不會喜歡任何緩存框架,直到它必須使用。

我很欣賞對此的迴應。

+1

您的數據庫是否支持觸發器? – assylias

+0

你使用什麼緩存? –

+0

我們正在使用mysql數據庫,但想遷移到mssql。你可以讓我知道如何使用觸發器更新內存對象。 – user1986187

回答

2

這是很難給你很好的回答你的問題沒有你的系統架構,設計約束,您的IT策略等的任何知識

個人而言,我會用消息模式來解決這個問題。是該模式的幾個優點如下:

  • 系統組件(計算過程,更新過程)可以鬆耦合
  • 根據實現消息傳遞模式,你可以「連接」很多計算過程(放大)和許多更新過程(使用主從方法)。

但是,實現消息傳遞模式可能是一項非常具有挑戰性的任務,我建議您採用現有的框架或產品之一。

我希望這會有助於至少一點。

0

我做了一些類似於你的場景的工作,通常有2種方式。 一,緩存持有者定期輪詢數據庫,獲取需要的數據並保存在內存中。數據可以存儲在HashMap或其他集合中。這種方法簡單易行,無需額外的框架或庫。但用戶不得不經常忍受髒數據。此外,如果輪詢數量巨大或查詢速度不夠快,輪詢會對數據庫造成很大壓力。但是,如果您對實時性的要求不高並且系統的規模相對較小,它通常不會很糟糕。

另一種方法是緩存持有者訂閱數據更新程序的通知並在收到通知後更新其數據。它提供了更好的用戶體驗,但是這會給您的系統帶來更多的複雜性,因爲您必須獲得一些MS基礎設施,例如JMS。開發和調整更加耗時。