user192702
user192702

Reputation: 243

Object size for Oracle Coherence

am very interested in using Oracle Coherence as a data store. My understanding is that it can store Java objects in name value pairs. So questions are:

  1. Are there any limit to the Java object size that can be stored per entry?
  2. Can any objects be stored?

Upvotes: 1

Views: 1871

Answers (2)

Vlad
Vlad

Reputation: 2165

I was investigating the issue with object size limit several monthes ago (with Coherence ver 3.6) and today my information can be stale. There was not possible to put object larger 120 Mb (approximately +-5Mb) in cache. I was playing with tangosol xml settings (recommended by support) but without success.

Upvotes: 0

cpurdy
cpurdy

Reputation: 1236

Because Coherence is a clustered system, there are some requirements for the objects that are stored. From http://docs.oracle.com/cd/E24290_01/coh.371/e22837/gs_intro.htm#CHDFGDIF

Cache keys and values must be serializable (for example, java.io.Serializable). Furthermore, cache keys must provide an implementation of the hashCode() and equals() methods, and those methods must return consistent results across cluster nodes. This implies that the implementation of hashCode() and equals() must be based solely on the object's serializable state (that is, the object's non-transient fields); most built-in Java types, such as String, Integer and Date, meet this requirement. Some cache implementations (specifically the partitioned cache) use the serialized form of the key objects for equality testing, which means that keys for which equals() returns true must serialize identically; most built-in Java types meet this requirement as well.

Patrick Peralta gives a great example here: http://blackbeanbag.net/wp/2010/06/06/coherence-key-howto/

Regarding the first question: "Are there any limit to the Java object size that can be stored per entry?"

  • There is an "absolute" limit of around 2GB, which is based on Java limits (since some intrinsic parts of Java, such as arrays, are designed as 32-bit data structures).
  • Coherence Elastic Data (transparent and elastic RAM/flash storage) limits values to 64MB.

One other thing to keep in mind is that the data that a server manages has be replicated for HA, and load-balanced on failover and when new servers spin up. That means if each server is managing 20GB of data (including 10GB that it is the primary owner of and 10GB that it manages for HA purposes), then when a server dies, a total of ~20GB will be moved around to re-achieve a cluster-wide HA status. On gigabit ethernet, a server can communicate about 120MB of data per second (i.e. moving 1GB takes about 8 seconds), so a cluster with 20 servers that each manage 20GB would take about 8 seconds to re-achieve cluster-wide HA. (This is one reason why Oracle engineered systems like Exalogic are built on 40 gigabit network fabrics!)

For the sake of full disclosure, I work at Oracle. The opinions and views expressed in this post are my own, and do not necessarily reflect the opinions or views of my employer.

Upvotes: 1

Related Questions