對於使用Oracle Coherence作爲數據存儲非常感興趣。我的理解是它可以將Java對象存儲在名稱值對中。所以問題是:Oracle Coherence的對象大小
- 對每個條目可以存儲的Java對象大小是否有任何限制?
- 是否可以存儲任何對象?
對於使用Oracle Coherence作爲數據存儲非常感興趣。我的理解是它可以將Java對象存儲在名稱值對中。所以問題是:Oracle Coherence的對象大小
由於Coherence是一個集羣系統,因此存儲的對象有一些要求。從http://docs.oracle.com/cd/E24290_01/coh.371/e22837/gs_intro.htm#CHDFGDIF
緩存鍵和值必須是可序列化(例如, 了java.io.Serializable)。此外,緩存鍵必須提供hashCode()和equals()方法的實現,而這些方法必須在集羣節點之間返回一致的結果。這個 意味着hashCode()和equals()的實現必須是 ,僅僅基於對象的可序列化狀態(也就是對象的非暫時性字段的 );大多數內置的Java類型(如String, Integer和Date)都符合此要求。一些緩存實現 (特別是分區緩存)使用關鍵對象的序列化形式進行相等性測試,這意味着equals()返回true的密鑰必須以相同方式序列化;大多數內置Java 類型也符合此要求。
帕特里克·佩拉爾塔這裏給出一個很好的例子:http://blackbeanbag.net/wp/2010/06/06/coherence-key-howto/
關於第一個問題:「是否有任何限制,可以每個條目存儲在Java對象大小」
要記住的另一件事是,服務器管理的數據已經被HA複製,並在故障轉移和新服務器啓動時進行負載平衡。這意味着如果每臺服務器都管理20GB的數據(包括10GB的主要所有者和10GB的高可用性),那麼當一臺服務器死亡時,總共大約20GB將被重新實現羣集範圍的HA狀態。在千兆以太網上,服務器每秒鐘可以傳輸大約120MB的數據(即移動1GB大約需要8秒),因此具有20臺服務器(每臺管理20GB)的羣集需要大約8秒鐘的時間才能重新實現羣集範圍的HA。 (這就是爲什麼像Exalogic這樣的Oracle工程系統構建在40千兆網絡結構上的原因之一!)
爲了充分披露,我在Oracle工作。本文所表達的意見和觀點屬於我自己的觀點,並不一定反映我的僱主的意見或看法。
我正在調查幾個月前的對象大小限制問題(使用Coherence版本3.6),今天我的信息可能已過時。無法將緩存中的對象放大120 Mb(大約+ -5Mb)。我正在玩Tangosol xml設置(通過支持推薦),但沒有成功。
謝謝你解釋了問題2。你能否在問題1中提出一些看法?比如說使用基於磁盤(即不存儲在內存中)的Coherence存儲方法,對象的大小是否有限制?基本上我可以像使用文件系統一樣使用它,並且因爲它內置冗餘,所以不需要使用RAID? – user192702
我更新了答案。從某種意義上說,您可以將其用作啓用事件的高速「共享文件系統」,儘管它不像文件系統那樣具有分層結構。 – cpurdy