5

我是德鲁伊的新手。已经看过《druid VS Elasticsearch》了,但是还是不知道druid擅长什么。

以下是我的问题:

  1. 我有一个 70 个节点的 solr 集群。

  2. 我在 solr 中有一个非常大的表,它有 10 亿行,每行有 100 个字段。

  3. 用户会使用字段的不同组合范围查询(一次查询至少20种组合)来统计customer id的distinct个数,但是solr的distinct count算法很慢而且占用内存很大,所以如果查询结果是超过20万,solr的查询节点就会崩溃。

druid 在不同的计数上是否比 solr 具有更好的性能?

4

3 回答 3

9

Druid 与 ES/Solr 等特定于搜索的数据库有很大不同。它是一个专为分析而设计的数据库,您可以在其中进行汇总、列过滤、概率计算等。

Druid 确实通过使用 HyperLogLog(一种概率数据结构)来区分。因此,如果您不担心 100% 的准确率,您绝对可以尝试 Druid,并且我已经在我的一个项目中看到响应时间的显着改进。但是,如果您关心准确性,那么 Druid 可能不是最好的解决方案(即使在 Druid 中也很有可能实现,但会影响性能并占用额外的空间) - 在这里查看更多信息: https://groups。 google.com/forum/#!topic/druid-development/AMSOVGx5PhQ

于 2016-08-29T11:58:50.287 回答
8

ES 通常需要原始数据,因为它是为搜索而设计的。这意味着索引很大,但嵌套聚合很昂贵。(我知道我在这里跳过了很多细节)。

Druid 专为时间序列数据的度量计算而设计。它对维度和指标有明确的区分。基于维度字段,度量字段在摄取时预先聚合。此步骤有助于根据维度数据的基数减少大量数据。换句话说,当维度是分类值时,Druid 效果最好。

你提到了range query。指标的范围过滤器效果很好。但是,如果您的意思是按数字维度进行查询,那么 Druid 仍在进行中。

至于distinct count,ES和Druid都支持HyperLogLog。在 Druid 中,您必须在摄取时指定字段才能在查询时应用 HyperLogLog。它非常快速和高效。

于 2016-10-12T03:54:27.640 回答
1

Elasticsearch 的最新版本(6.x AFAIK)支持您的用例,您将从所有 3 个(Druid、ES、Solr)中获得结果,但要回答您关于性能的最后一个问题,我觉得 Druid 将是性能最高的,而且性能最低您的用例的资源需求。

虽然 ES 支持分析和聚合,但它的主要设计是基于自由文本搜索要求。由于 ES 所做的事情比您上面提到的要求更多,它会使用资源并且可能不合适,除非您想做的不仅仅是不同的计数。

引用德鲁伊的网站https://druid.apache.org/docs/latest/comparisons/druid-vs-elasticsearch.html

Druid 专注于 OLAP 工作流。Druid 针对低成本的高性能(快速聚合和摄取)进行了优化,并支持广泛的分析操作。

于 2019-07-10T06:04:23.563 回答