2016-08-24 84 views
2

我是德魯伊新手。我已經讀過「德魯伊VS Elasticsearch」,但我仍然不知道德魯伊擅長什麼。德魯伊vs Elasticsearch

下面是我的問題:

  1. 我有70個節點的集羣的Solr。

  2. 我有一個非常大的solr表中有10億行,每行有100個字段。

  3. 用戶將使用字段的不同組合範圍查詢(至少在一個查詢中有20個組合)來計算客戶ID的不同數量,但solr的不同計數算法非常慢並且使用大量內存,所以如果查詢結果超過20萬,solr的查詢節點將會崩潰。

德魯伊在獨立計數方面是否比solr有更好的性能?

+0

Solr 5.2可以使用HyperLogLog進行基數計數:https://lucidworks.com/blog/2015/05/26/hyperloglog-field-value-cardinality-stats/ –

回答

2

德魯伊與搜索特定的數據庫(如ES/Solr)有很大的不同。它是一個專爲分析而設計的數據庫,您可以在其中進行彙總,列過濾,概率計算等。

Druid確實通過使用HyperLogLog來計數,這是一種概率數據結構。所以如果你不擔心100%的準確性,你絕對可以嘗試德魯伊,並且我在其中一個項目中看到了響應時間的巨大改進。但是,如果你關心準確性,那麼德魯伊可能不是最好的解決方案(儘管德魯伊也可能實現這個目標,性能命中和額外的空間佔用) - 請參閱更多:https://groups.google.com/forum/#!topic/druid-development/AMSOVGx5PhQ

+2

供參考:ES支持基於'基數'聚合在HyperLogLog ++算法上。 –

+0

哦,真好!不知道這件事。如果您使用'cardinality'聚合,您對索引大小減少了多少指標? –

+0

'cardinality'是查詢時間聚合。我不認爲它在索引大小方面有幫助。 –

2

ES通常需要原始數據,因爲它專爲搜索而設計。這意味着索引是巨大的,但嵌套聚合是昂貴的。 (我知道我在這裏跳過了很多細節)。

德魯伊專爲時間序列數據的度量計算而設計。它具有明確的維度和指標的區別。基於維度字段,度量字段在攝入時被預先聚合。此步驟有助於根據維度數據的基數來減少大量數據。換句話說,當維度是分類值時,德魯伊效果最好。您提到的range query。指標上的範圍過濾器效果很好。但是如果你的意思是通過數值維度來查詢,那麼Druid仍然在進行中。

至於不同的計數,ES和Druid都支持HyperLogLog。在德魯伊中,您必須在提取時指定字段,以便在查詢時應用HyperLogLog。它非常快速和高效。