2

有人可以解释或链接到有关如何使用 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

这将遇到的一个问题是,您需要在给定范围内的每一秒进行迭代,以找出最后一分钟特定事件的计数。

4

1 回答 1

0

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

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

顺便说一句,查看 groups.google.com/forum/#!forum/druid-development 了解有关 HLL 和 druid 的更多问题。

于 2014-04-08T21:37:13.963 回答