title: Which NoSQL Implementation is Most Appropriate?
body: <p>I'm new to NoSQL, and I'm scratching my head trying to figure out the most appropriate NoSQL implementation for the application I'm trying to build.</p>
  
  <p>My Java application needs to have an in-memory hashmap containing millions to billions of entries as it models a single-layer neural network. Right now we're using <a href="http://trove.starlight-systems.com/">Trove</a> in order to be able to use primitives as keys and values to reduce the size of the map and increase the access speed. The map is a map of maps where the outer map's keys are longs and the inner maps have long/float key/values. </p>
  
  <p>We need to be able to read the saved state from disk to the map of maps when the application starts up. The changes to the map of maps need also to be saved to disk either continuously or according to some scheduled interval. </p>
  
  <p>I was at first drawn towards <a href="http://www.orientdb.org/">OrientDB</a> because of their document and object DBs, although I'm still not sure at this point what would be better. Then I came across <a href="http://redis.io/">Redis</a>, which is a key value store and works with an in-memory dataset that can be dumped to disk, including master-slave replication. However, it doesn't look like the values of the map can be anything other than Strings. </p>
  
  <p>Am I looking in the right places for a solution to my needs? Right now, I like the in-memory and master-slave aspect of Redis, but I like the object/document capabilities of OrientDB as my data structures are more complicated than simple Strings and being able to use Trove with the primitive key/value types is very advantageous. It would be better if reading was cheap and writing was expensive rather than the other way around.</p>
  
  <p>Thoughts?</p>