【问题标题】:How to apply hyperloglog to a timeseries stream如何将 hyperloglog 应用于时间序列流
【发布时间】:2014-05-17 12:37:08
【问题描述】:

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

其中一个问题是,您需要遍历给定范围内的每一秒,以找出最后一分钟特定事件的计数。

【问题讨论】:

    标签: counting druid hyperloglog


    【解决方案1】:

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

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

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

    【讨论】:

    • 我试图了解如何使用 HLL 来实现时间序列聚合,但我提到了 druid,因为它是执行此操作的项目示例。我正在寻找有关如何仅使用 HLL 来完成此操作的一般说明,而无需任何特定的库或数据库。
    • 这些资源可能会有所帮助 - youtube.com/watch?v=Hpd3f_MLdXo - metamarkets.com/2012/…
    • 啊!如果我从那个视频中得到它,你们确实存储一个 HLL 草图 每条记录(因此,如果数据的粒度是 1 秒,那么你每个有 1 个 HLL 草图第二)。您可以通过使用一些分片存储解决方案(如 s3)将存储拆分到多个分区来处理存储需求。
    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2012-07-13
    • 1970-01-01
    • 2011-04-07
    • 2021-11-29
    相关资源
    最近更新 更多