Oracle Coherence的对象大小

时间:2014-01-15 14:55:12

标签: caching

我非常有兴趣将Oracle Coherence用作数据存储。我的理解是它可以将Java对象存储在名称值对中。所以问题是:

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

由于Coherence是一个集群系统,因此对存储的对象有一些要求。来自http://docs.oracle.com/cd/E24290_01/coh.371/e22837/gs_intro.htm#CHDFGDIF

  

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

Patrick Peralta在这里给出了一个很好的例子:http://blackbeanbag.net/wp/2010/06/06/coherence-key-howto/

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

  • 存在大约2GB的“绝对”限制,它基于Java限制(因为Java的某些固有部分,例如数组,被设计为32位数据结构)。
  • Coherence弹性数据(透明和弹性RAM /闪存存储)将值限制为64MB。

要记住的另一件事是,服务器管理的数据必须为HA复制,并在故障转移时以及新服务器启动时进行负载平衡。这意味着如果每个服务器管理20GB的数据(包括它是主要所有者的10GB,以及为HA目的管理的10GB),那么当服务器终止时,总共会移动大约20GB的数据来重新实现群集范围的HA状态。在千兆以太网上,服务器每秒可以传输大约120MB的数据(即移动1GB大约需要8秒),因此具有20个服务器的群集每个管理20GB将需要大约8秒来重新实现群集范围的HA。 (这就是像Exalogic这样的Oracle工程系统基于40千兆网络结构构建的一个原因!)

为了充分披露,我在Oracle工作。本文中表达的观点和观点是我自己的,不一定反映我的雇主的意见或观点。