title: Best NoSQL approach to handle 100+ million records
body: <p>I am working on a project were we are batch loading and storing huge volume of data in Oracle database which is constantly getting queried via Hibernate against this 100+ million records table (the reads are much more frequent than writes). 
  To speed things up we are using Lucene for some of queries (especially geo bounding box queries) and Hibernate second level cache but thats still not enough. We still have bottleneck in Hibernate queries against Oracle (we dont cache 100+ million table entities in Hibernate second level cache due to lack of that much memory). </p>
  
  <p>What additional NoSQL solutions (apart from Lucene) I can leverage in this situation? </p>
  
  <p>Some options I am thinking of are: </p>
  
  <ol>
  <li><p>Use distributed ehcache (Terracotta) for Hibernate second level to leverage more memory across machines and reduce duplicate caches (right now each VM has its own cache). </p></li>
  <li><p>To completely use in memory SQL database like H2 but unfortunately those solutions require loading 100+ mln tables into single VM. </p></li>
  <li><p>Use Lucene for querying and BigTable (or distributed hashmap) for entity lookup by id. 
  What BigTable implementation will be suitable for this? I was considering HBase. </p></li>
  <li><p>Use MongoDB for storing data and for querying and lookup by id.</p></li>
  </ol>