2014-04-05 48 views
2

有人可以解釋或鏈接到關於如何計算HLL集的基數可用於時間序列分析的解釋嗎?如何將hyperloglog應用於時間序列流

我很確定druid.io完全是這樣,但我正在尋找一個通用的解釋,說明如何在沒有任何特定的庫/數據庫或特定的HLL實現的情況下單獨使用HLL來完成此操作。

一個天真的做法是通過在我們正在計算的東西上加上時間戳。例如,使用redis HLL API作爲一個例子,如果你正在對事件計數,從第二1000001開始到第二1000060:

PFADD SOMEHLLVAR "1000001-event1" "1000001-event2" ... 
PFADD SOMEHLLVAR "1000002-event1" "1000002-event3" ... 
PFADD SOMEHLLVAR "1000003-event2" "1000003-event3" ... 

# Get count of occurrences of event1 in a minute long range: 
PFCOUNT "1000001-event1" -> 1  
PFCOUNT "1000002-event1" -> 1 
PFCOUNT "10000..-event1" -> .. 
PFCOUNT "1000060-event1" -> 0  
...add all numbers!  -> 2 

的,這將有問題的只是一個是,你需要通過每個第二迭代在給定的範圍內找出最後一分鐘特定事件的計數。

回答

0

在德魯伊中使用hyperUnique聚合器需要攝取端和查詢端之間的協調。

在攝取方面,在您的聚合器列表中,您需要包含一個「hyperUnique」聚合器,其中fieldName與您希望最終運行唯一計數的維度相匹配。這創建了一個包含HLL「草圖」的新度量。當您的數據被攝入並且可查詢時,您可以在查詢端使用相同的「hyperUnique」聚合器來查詢您攝入的指標。您可以試試時間序列查詢(http://druid.io/docs/latest/TimeseriesQuery.html

順便說一句,查看groups.google.com/forum/#!forum/druid-development以獲取更多關於HLL和德魯伊的問題。

+2

我想了解如何在一般情況下使用HLL實現時間序列聚合,但我提到了德魯伊,因爲它是一個項目的例子。我正在尋找關於如何在沒有任何特定的庫或數據庫的情況下單獨使用HLL來完成此操作的一般說明。 –

+0

這些資源可能有所幫助 - https://www.youtube.com/watch?v=Hpd3f_MLdXo - http://metamarkets.com/2012/fast-cheap-and-98-right-cardinality-estimation-for-big-資料/ – user3512891

+0

啊!如果我從該視頻中獲得了正確的信息,那麼您**每個記錄**都會存儲一個HLL草圖**(因此,如果數據的粒度爲1秒,則每秒有1個HLL草圖)。您可以通過使用一些分片存儲解決方案(如s3)將存儲分割到多個分區來處理存儲需求。 –

相關問題