与 Elasticsearch 相比,Apache Pinot 如何索引数据?

How does Apache Pinot index data when compared to Elasticsearch?

Elasticsearch 和 Pinot 都在内部使用 Apache Lucene。他们的索引策略有何不同?

P.S。由于一个糟糕的问题,我的完全有效的答案被删除了,因为它是 'opinion-based'。所以发布带有有效问题的答案,以便对社区有用。

Apache Pinot 和 Elasticsearch 解决了截然不同的问题。

Elasticsearch 是一种用于全文搜索、模糊查询、自动完成搜索词等的搜索引擎。它使用一种叫做倒排索引的东西来实现这一点。传统索引使用排序索引,其中将文档存储为键,将关键字存储为值。在这种情况下,查询延迟会非常高,因为需要搜索整个文档。但是在倒排索引中,关键字存储为键,文档 ID 存储为值。这里,由于只需要搜索搜索关键字,查询延迟会很低。因此,Elasticsearch使用倒排索引来解决其核心目的,即'search'.

Apache Pinot 不是为 'search' 构建的。它是为实时分析而构建的。它使用一种称为星树索引的东西,类似于数据所有维度的所有组合的预聚合值存储。如您所见,Apache Pinot 对数据中的聚合 derivations/reductions 而不是数据本身感兴趣。它使用这些预先聚合的值来提供非常低延迟的实时数据分析。

Apache Pinot 的一个非常重要的用例是计算每个用户级别的实时分析并呈现面向每个用户的实时仪表板。 Elasticsearch 也可以使用 Kibana 呈现实时仪表板,但由于它使用倒排索引方法,因此它不适合每个用户级别的分析,因为这会给服务器带来巨大的负载并且需要大量的弹性实例。由于这个上限,Elasticsearch 不适合每个用户级别的分析。

因此,如果您希望在您的应用程序中具有搜索功能以及每个用户级别的分析,最好的方法是让 Elasticsearch 和 Pinot 消费者通过并行管道从同一个 Kafka 主题中摄取数据。这样,当 Elasticsearch 为搜索目的索引数据时,Pinot 将处理数据以进行每个用户级别的分析。