Я работаю над проектом, в котором мы выполняем пакетную загрузку и сохраняем огромный объем данных в базе данных Oracle, которая постоянно запрашивается через Hibernate для этой таблицы из 100+ миллионов записей (чтения выполняются гораздо чаще, чем пишет). Чтобы ускорить процесс, мы используем Lucene для некоторых запросов (особенно для запросов с ограничивающими географическими координатами) и кеш второго уровня Hibernate, но этого все еще недостаточно. У нас все еще есть узкое место в запросах Hibernate к Oracle (мы не кэшируем более 100 миллионов объектов таблиц в кеш-памяти второго уровня Hibernate из-за нехватки такой большой памяти).
Какие дополнительные решения NoSQL (кроме Lucene) я могу использовать в этой ситуации?
Вот некоторые варианты, о которых я думаю:
Использовать распределенный ehcache (Terracotta) для второго уровня Hibernate, чтобы использовать больше памяти на разных машинах и уменьшить количество дублирующихся кешей (прямо сейчас каждая виртуальная машина имеет свой собственный кеш).
Чтобы полностью использовать в памяти базу данных SQL, такую как H2, но, к сожалению, эти решения требуют загрузки более 100 миллионов таблиц в одну виртуальную машину.
Используйте Lucene для запросов и BigTable (или распределенную хэш-карту) для поиска объекта по идентификатору. Какая реализация BigTable подойдет для этого? Я рассматривал HBase.
Используйте MongoDB для хранения данных, а также для запросов и поиска по идентификатору.