什么是 hyperloglog,它有什么用?
What is hyperloglog and why is this good for?
我正在研究 Redis 支持的数据结构,但未能找到可以让我理解什么是 HyperLogLog 的解释。
我如何使用它,为什么它有好处?
基本上是Redis的一种Set
,使用优化算法统计元素,避免大量消耗内存。 Set
和 HyperLogLog
之间的区别在于,使用 HyperLogLog 您可以添加、计算唯一元素并将一些 HyperLogLogs 合并到另一个 HyperLogLog 中,所以基本上您不会将成员存储在 HyperLogLog 中您可以在 SET 中执行并检索它们,您只需存储不同成员的出现,这就是 HyperLogLog 不提供检索其存储成员的命令的原因。
一个明确的用例可能是,如果你想拥有一个巨大的 SET,你想在其中计算集合中唯一数据数量的这么多倍,你对集合中的哪些数据不感兴趣,你是即使集合增长很多,也只对消耗低内存感兴趣。例如,假设您有一个具有大量用户且所有用户都非常活跃的高影响力系统,并且您有兴趣了解系统每个网页中的唯一身份访问者的数量。您想要更新 real-time,因此您将每秒查询每个网站的唯一身份访问者。您可以为系统中的每个 URI 创建一个 HyperLogLog,它将代表该网页,并且每次用户访问 URL 您都会 PFAAD user_id:
PFAAD /api/show/concerts id789989
然后每一秒你将迭代每个 URL-HyperLogLog 以获得独特的数量 user-visitors
PFCOUNT /api/show/concerts
145542
PFCOUNT /api/show/open-airs
25565223
你会说,是的,但我可以通过使用 SET 获得相同的功能,好处是每个集合中的 user_ids 作为成员。是的,你可以,但是你会通过使用集合来消耗大量内存,并且每次(秒)你查询每个集合以使用 SCARD 命令获取唯一访问者的数量,你会花费更多的内存,所以至少你需要存储 user_ids 出于某种原因,HyperLogLogs 作为唯一元素的计数器是更好的选择。对于我们的用例,想象一下有 200-300 个集合,里面有大约 20-30k 的用户。
HyperLogLog与Set命令的对应关系:
- PFADD = SADD
- PFCOUNT = SCARD
- PFMERGE = 联合
我正在研究 Redis 支持的数据结构,但未能找到可以让我理解什么是 HyperLogLog 的解释。
我如何使用它,为什么它有好处?
基本上是Redis的一种Set
,使用优化算法统计元素,避免大量消耗内存。 Set
和 HyperLogLog
之间的区别在于,使用 HyperLogLog 您可以添加、计算唯一元素并将一些 HyperLogLogs 合并到另一个 HyperLogLog 中,所以基本上您不会将成员存储在 HyperLogLog 中您可以在 SET 中执行并检索它们,您只需存储不同成员的出现,这就是 HyperLogLog 不提供检索其存储成员的命令的原因。
一个明确的用例可能是,如果你想拥有一个巨大的 SET,你想在其中计算集合中唯一数据数量的这么多倍,你对集合中的哪些数据不感兴趣,你是即使集合增长很多,也只对消耗低内存感兴趣。例如,假设您有一个具有大量用户且所有用户都非常活跃的高影响力系统,并且您有兴趣了解系统每个网页中的唯一身份访问者的数量。您想要更新 real-time,因此您将每秒查询每个网站的唯一身份访问者。您可以为系统中的每个 URI 创建一个 HyperLogLog,它将代表该网页,并且每次用户访问 URL 您都会 PFAAD user_id:
PFAAD /api/show/concerts id789989
然后每一秒你将迭代每个 URL-HyperLogLog 以获得独特的数量 user-visitors
PFCOUNT /api/show/concerts
145542
PFCOUNT /api/show/open-airs
25565223
你会说,是的,但我可以通过使用 SET 获得相同的功能,好处是每个集合中的 user_ids 作为成员。是的,你可以,但是你会通过使用集合来消耗大量内存,并且每次(秒)你查询每个集合以使用 SCARD 命令获取唯一访问者的数量,你会花费更多的内存,所以至少你需要存储 user_ids 出于某种原因,HyperLogLogs 作为唯一元素的计数器是更好的选择。对于我们的用例,想象一下有 200-300 个集合,里面有大约 20-30k 的用户。
HyperLogLog与Set命令的对应关系:
- PFADD = SADD
- PFCOUNT = SCARD
- PFMERGE = 联合