Как Apache Pinot индексирует данные по сравнению с Elasticsearch?

И Elasticsearch, и Pinot используют Apache Lucene для внутренних целей. Чем они отличаются в своих стратегиях индексации?

PS Мой совершенно правильный ответ был удален из-за плохого вопроса, который был закрыт, поскольку он был «основан на мнении». Поэтому публикуйте ответ с действительным вопросом, чтобы он мог быть полезен для сообщества.

1 ответ

Apache Pinot и Elasticsearch решают разные проблемы.

Elasticsearch — это поисковая система, используемая для полнотекстового поиска, нечетких запросов, автозаполнения условий поиска и т. д. Это достигается с помощью так называемого инвертированного индекса. При обычном индексировании использовался отсортированный индекс, в котором документ сохранялся в качестве ключа, а ключевые слова — в качестве значения. В этом случае задержка запроса будет очень высокой, поскольку необходимо искать весь документ. Но в инвертированном индексе ключевое слово сохраняется как ключ, а идентификатор документа — как значение. Здесь, поскольку для поиска необходимы только ключевые слова поиска, задержка запроса будет очень низкой. Следовательно, Elasticsearch использует инвертированные индексы для решения своей основной задачи — «поиска».

Apache Pinot не был создан для «поиска». Он был скорее создан для аналитики в реальном времени. Он использует то, что называется индексом звездного дерева, что-то вроде предварительно агрегированного хранилища значений всех комбинаций всех измерений данных. Как видите, Apache Pinot заинтересован в совокупных производных/редукциях из данных, а не в самих данных. Он использует эти предварительно агрегированные значения для обеспечения аналитики данных в реальном времени с очень низкой задержкой.

Очень важным вариантом использования Apache Pinot будет вычисление аналитики на уровне пользователя в реальном времени и отображение панелей мониторинга для каждого пользователя в реальном времени. Elasticsearch также может отображать информационные панели в реальном времени с помощью Kibana, но, поскольку он использует метод инвертированного индекса, он не подходит для аналитики на уровне каждого пользователя, поскольку это создает огромную нагрузку на сервер и требует большого количества эластичных экземпляров. Из-за этой верхней границы Elasticsearch не подходит для аналитики на уровне пользователя.

Таким образом, если вы хотите иметь функции поиска в своем приложении, а также аналитику на уровне пользователя, лучшим способом было бы, чтобы потребители Elasticsearch и Pinot получали данные из одной и той же темы Kafka через параллельные конвейеры. Таким образом, в то время как Elasticsearch индексирует данные для целей поиска, Pinot будет обрабатывать данные для аналитики на уровне каждого пользователя.

Другие вопросы по тегам