Caching Oracle一致性的对象大小

Caching Oracle一致性的对象大小,caching,Caching,我对使用Oracle Coherence作为数据存储非常感兴趣。我的理解是,它可以以名称-值对的形式存储Java对象。因此,问题是: 每个条目可以存储的Java对象大小是否有任何限制 可以存储任何对象吗 因为一致性是一个集群系统,所以对存储的对象有一些要求。从 缓存键和值必须可序列化(例如, java.io.Serializable)。此外,缓存密钥必须提供 hashCode()和equals()方法的实现,以及 方法必须跨群集节点返回一致的结果。这 表示hashCode()和equals()的

我对使用Oracle Coherence作为数据存储非常感兴趣。我的理解是,它可以以名称-值对的形式存储Java对象。因此,问题是:

  • 每个条目可以存储的Java对象大小是否有任何限制
  • 可以存储任何对象吗

  • 因为一致性是一个集群系统,所以对存储的对象有一些要求。从

    缓存键和值必须可序列化(例如, java.io.Serializable)。此外,缓存密钥必须提供 hashCode()和equals()方法的实现,以及 方法必须跨群集节点返回一致的结果。这 表示hashCode()和equals()的实现必须是 仅基于对象的可序列化状态(即对象的 非瞬态场);大多数内置Java类型,例如字符串, 整数和日期,满足此要求。一些缓存实现 (特别是分区缓存)使用 用于相等性测试的键对象,这意味着 equals()返回true,必须以相同的方式序列化;最内置的Java 类型也满足此要求

    Patrick Peralta在这里给出了一个很好的例子:

    关于第一个问题:“每个条目可以存储的Java对象大小是否有任何限制?”

    • 有一个大约2GB的“绝对”限制,它基于Java限制(因为Java的一些固有部分,如数组,被设计为32位数据结构)
    • 相干弹性数据(透明和弹性RAM/flash存储)将值限制为64MB
    要记住的另一件事是,服务器管理的数据必须为HA进行复制,并在故障切换和新服务器启动时进行负载平衡。这意味着,如果每台服务器都在管理20GB的数据(包括它是主要所有者的10GB和它为HA目的管理的10GB),那么当一台服务器死亡时,将总共移动约20GB以重新实现群集范围的HA状态。在千兆以太网上,一台服务器每秒可以传输约120MB的数据(即移动1GB大约需要8秒),因此一个包含20台服务器(每台服务器管理20GB)的集群需要大约8秒才能重新实现集群范围的HA。(这就是为什么像Exalogic这样的Oracle工程系统构建在40千兆网络结构上的原因之一!)


    为了充分披露,我在甲骨文公司工作。这篇文章中表达的意见和观点是我自己的,不一定反映我雇主的意见或观点。

    几个月前,我正在调查对象大小限制问题(使用Coherence ver 3.6),今天我的信息可能会过时。无法将大于120 Mb(约+-5Mb)的对象放入缓存中。我正在使用tangosol xml设置(由支持人员推荐),但没有成功。

    谢谢,这解释了问题2。你能解释一下问题1吗?例如,使用基于磁盘(即不存储在内存中)的存储方法来实现一致性,对象的大小是否有限制?基本上我可以像使用文件系统一样使用它,因为它是内置冗余的,所以我不需要使用RAID?我更新了答案。从某种意义上说,您可以将它用作一个非常高速且支持事件的“共享文件系统”,尽管它不像文件系统那样具有层次结构?我听说过使用大于1 GB的对象的用例。我通过客户端访问了C++的一致性(一致性。DLL),并且在将BROB更多的时候,120到125 MB的情况下,我收到了长Java java栈的异常,这些异常包含了“小套接字缓冲器”(或类似的东西——就像我前面提到的几个月前)。可能只是C++客户端(一致性.dll)的问题。