Какое решение "BigData" я должен использовать для этой проблемы? Hbase? MongoDB? Другие? - PullRequest
0 голосов
/ 23 января 2019

Это больше вопрос о том, какой тип решения NOSQL более подходит для решения этой проблемы.

Проблема

Бэкэнд-система Java создает "обновления" для "параметров" с частотой около 1000 / сек. Параметр в основном представляет собой объект со значением, типом, именем, описанием и множеством другой информации, связанной с его определением, допустимостью, проверками, временными метками обновления и т. Д. Обновление представлено в виде Java Pojo ( ~ 450 байт) и содержит около 40 полей.

Необходимо сохранить все эти обновления (1000 / сек) в течение следующих 10 лет. Как видите, у вас останется около 35 миллиардов обновлений для хранения.

Важно знать, что каждое обновление имеет только небольшой набор полей, которые меняются:

  • обычно есть поля, которые меняются каждый раз (см. Значение и время),
  • другие, которые редко изменяются (например, тип, проверка достоверности),
  • другие, которые в основном никогда не меняются (например, имя, описание, UUID и т. Д.)

Хранить все эти обновления в hbase как независимые строки невозможно, потому что я в конечном итоге буду хранить петабайты данных со временем и не могу себе этого позволить. Я также считаю, что невозможно будет оперативно получить эти данные.

Другим важным моментом является то, что мне нужно поддерживать очень сложные поисковые запросы, часто со сложными фильтрами. Некоторые примеры этих запросов приведены в качестве примера ниже:

  • получение последнего дня обновления набора выбранных 1000 Параметры
  • получить последнее значение заданного набора выбранного параметра. Последнее значение иногда можно найти всего несколько лет назад в истории (так называемые редкие параметры)
  • извлечение единственного набора параметров на основе подстановочного знака имени и более сложной фильтрации

Вопрос

Правильнее ли использовать решение с широкими столбцами, например, HBase, или лучше использовать решения на основе документов, такие как MongoDB?

Мой приоритет состоит в том, чтобы хранить хранилище в терабайтовых порядках (скажем, ниже 100-200 тера за все время) и иметь отзывчивость запросов в течение нескольких секунд (обычно 2-3).

Я знаю, что это очень широкий вопрос, но он помог бы мне увидеть точку зрения кого-то наверняка более опытного, чем я!

Большое спасибо заранее

1 Ответ

0 голосов
/ 23 января 2019

HBase хорошо подходит для рабочих нагрузок «ключ-значение» с большими объемами произвольного чтения и записи, особенно для тех организаций, которые уже вложили значительные средства в HDFS в качестве общего уровня хранения. Ведущий дистрибьютор Hadoop позиционировал HBase для «сверхмасштабных, но довольно упрощенных вариантов использования».

По сравнению с MongoDB, позиционирование продолжается следующим образом: «HBase предлагает очень быстрые случайные чтения и случайные записи, если вы хотите искать пользователей по определенному ключу, но MongoDB предоставляет гораздо более богатую модель, с помощью которой вы могли бы отслеживать Поведение пользователя на всем пути через онлайн-приложение. ”

Философия проектирования MongoDB сочетает ключевые концепции реляционных технологий с преимуществами новых баз данных NoSQL. Хотя HBase обладает высокой масштабируемостью и производительностью для подмножества вариантов использования, MongoDB может использоваться в более широком диапазоне приложений. Интуитивно понятная модель данных, транзакции ACID с несколькими документами, богатая структура запросов, собственные драйверы и меньшие накладные расходы часто позволяют пользователям отправлять новые приложения быстрее и проще, чем с HBase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...