我非常有兴趣将Oracle Coherence用作数据存储。我的理解是它可以将Java对象存储在名称值对中。所以问题是:
答案 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对象大小是否有限制?”
要记住的另一件事是,服务器管理的数据必须为HA复制,并在故障转移时以及新服务器启动时进行负载平衡。这意味着如果每个服务器管理20GB的数据(包括它是主要所有者的10GB,以及为HA目的管理的10GB),那么当服务器终止时,总共会移动大约20GB的数据来重新实现群集范围的HA状态。在千兆以太网上,服务器每秒可以传输大约120MB的数据(即移动1GB大约需要8秒),因此具有20个服务器的群集每个管理20GB将需要大约8秒来重新实现群集范围的HA。 (这就是像Exalogic这样的Oracle工程系统基于40千兆网络结构构建的一个原因!)
为了充分披露,我在Oracle工作。本文中表达的观点和观点是我自己的,不一定反映我的雇主的意见或观点。