2012-05-31 103 views
0

我有一個在Glassfish上運行的消息驅動bean。它每秒接收數百條消息。接收到消息後,它需要讀取JDBC數據庫中的值並進行處理。緩存內存中的數據庫內容以提高性能

然而,在數據庫中的值將僅一天或更短的一次更新。因此,MDB在大多數情況下會讀取一致的內容。那麼,是否有一種將內容緩存到內存以提高性能的好方法?

更新:是更多鈔票以配置MDB一個內存數據庫的JDBC連接池的Glassfish的?

+2

你知道這個值什麼時候更新(是在一個固定的時間嗎?)。如果您一段時間不使用更新的數據,這有什麼關係嗎?多久?你在用什麼數據庫?數據庫使用的是什麼部分(所有的數據庫,或者只是一個「隨機」部分)?許多消息都希望從數據庫中讀取相同的值,還是均勻地分散到數據庫中? –

+0

@andrewcooke是的,更新是在固定的時間完成的,比如說00:00,在這段時間之後的某段時間使用過時的數據是可以的,因爲使用量將會被關閉到0。我正在使用Java DB,並且將使用數據庫中的一些固定表。所有的味精都要從數據庫中準備好相同的值。任何建議如何實施?謝謝。 – zhushp

+0

是否可以在Glassfish for JavaDB中配置內存數據庫? – zhushp

回答

1

您可能會被identity map pattern靈感,實現自己的緩存機制(用自己的過期策略),如果你認爲使用第三方解決方案(如memcached)將是矯枉過正。

0

最明顯的答案是將表定義爲MEMORY表類型。如果底層硬件不容易崩潰,並且操作系統穩定並且連接了UPS,那麼您可能需要考慮這一點。這也取決於自上次備份以來失去多次事務的後果。但性能方面,這是閃電般的。更多信息可以在MySQL找到here。 (因人而異)

我實現了多個表這種方式,這對我來說真是棒極了。

0

您可以使用一個簡單的HashMap SoftReference基於緩存。以下是完整的實施示例SoftReference Cache另外,您可以定期清除完整的Map以引入新的數據。
或者如果您可以使用第三方庫,您可以使用ReferenceMap作爲Apache Collections的一部分提供。