Лучший подход NoSQL для обработки 100+ миллионов записей

Я работаю над проектом, в котором мы выполняем пакетную загрузку и сохраняем огромный объем данных в базе данных Oracle, которая постоянно запрашивается через Hibernate для этой таблицы из 100+ миллионов записей (чтения выполняются гораздо чаще, чем пишет). Чтобы ускорить процесс, мы используем Lucene для некоторых запросов (особенно для запросов с ограничивающими географическими координатами) и кеш второго уровня Hibernate, но этого все еще недостаточно. У нас все еще есть узкое место в запросах Hibernate к Oracle (мы не кэшируем более 100 миллионов объектов таблиц в кеш-памяти второго уровня Hibernate из-за нехватки такой большой памяти).

Какие дополнительные решения NoSQL (кроме Lucene) я могу использовать в этой ситуации?

Вот некоторые варианты, о которых я думаю:

  1. Использовать распределенный ehcache (Terracotta) для второго уровня Hibernate, чтобы использовать больше памяти на разных машинах и уменьшить количество дублирующихся кешей (прямо сейчас каждая виртуальная машина имеет свой собственный кеш).

  2. Чтобы полностью использовать в памяти базу данных SQL, такую ​​как H2, но, к сожалению, эти решения требуют загрузки более 100 миллионов таблиц в одну виртуальную машину.

  3. Используйте Lucene для запросов и BigTable (или распределенную хэш-карту) для поиска объекта по идентификатору. Какая реализация BigTable подойдет для этого? Я рассматривал HBase.

  4. Используйте MongoDB для хранения данных, а также для запросов и поиска по идентификатору.

6
задан Community 22 September 2017 в 18:01
поделиться