如何将超级日志应用于时间序列流

时间:2014-04-05 01:48:27

标签: counting druid hyperloglog

有人可以解释或链接到关于如何计算HLL集合的基数可用于时间序列分析的解释吗?

我很确定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

这可能只会遇到一个问题,就是需要在给定范围内迭代每一秒,以找出最后一分钟内特定事件的数量。

1 个答案:

答案 0 :(得分:0)

在Druid中使用hyperUnique聚合器需要在摄取端和查询端之间进行一些协调。

在摄取方面,在您的聚合器列表中,您需要包含一个" hyperUnique" clusterName,其中fieldName与您希望最终运行的维度匹配唯一计数。这将创建一个包含HLL"草图"的新指标。当您的数据被摄取和查询时,您使用相同的" hyperUnique"查询端的聚合器,用于查询您提取的度量标准。您可以尝试一个时间序列查询(http://druid.io/docs/latest/TimeseriesQuery.html

BTW,请查看groups.google.com/forum/#!forum/druid-development,了解有关HLL和德鲁伊的更多问题。