2013-02-25 29 views
1

在我們預計會有大量併發用戶的項目中,我們可以選擇爲每個連接用戶(會話)使用一個命名緩存,或者爲所有會話狀態使用一個大的命名緩存。使用一個大緩存會更加複雜,因爲我們需要靈活的機制來將數據附加到會話中,但可能會更高效。每個會話使用唯一命名緩存的主要原因是能夠通過簡單地銷燬命名緩存來銷燬與其相關的所有數據。預計這隻會在內存中運行,訪問速率將非常低。使用Oracle Coherence,創建新的NamedCache有多昂貴?

使用一個大緩存會有更多的性能嗎?使用Coherence使用大量命名緩存實例是否被認爲是「不好的做法」?簡而言之,它在Coherence中分配一個新的命名緩存需要多少開銷?

回答

0

爲什麼不使用CoherenceWeb

CoherenceWeb正是爲了這個目的,它是用來維護用戶/成員的會話數據。

在CoherenceWeb中,它使用一個緩存來維護所有用戶的會話數據,每個成員都有一個條目。

2

通常,與NamedCaches相關的最大開銷是創建一個MBean來跟蹤其統計信息。這些MBean的複製可能會消耗更多的網絡帶寬。打開JConsole以查看數百或數千個緩存MBean也將是不切實際的。

如果您的要求是使用多個緩存條目來存儲與用戶相關的數據,我會使用密鑰關聯來實現這一點。使用這種方法,您可以創建一個組合鍵,其中包含用戶身份以及緩存條目的標識符。這種方法將強制特定用戶的所有數據駐留在同一個分區上 - 因此也是同一個存儲成員。

然後,您可以使用它將過濾器和條目處理器定位到關聯的鍵 - 包括條目處理器以在用戶會話過期時刪除高速緩存條目。這將更有效率,因爲它只需要一個緩存服務器來響應用戶的請求,而不是要求整個羣集響應銷燬緩存的請求。

這些鏈接應該讓你開始:

http://docs.oracle.com/cd/E24290_01/coh.371/e22837/api_dataaffinity.htm

http://blackbeanbag.net/wp/2010/06/06/coherence-key-howto/