redis 什么是hyperloglog,为什么它有好处?

xyhw6mcr  于 2022-10-31  发布在  Redis
关注(0)|答案(2)|浏览(186)

我正在研究Redis支持的数据结构,我无法找到一个解释,可以让我理解什么是HyperLogLog。
我如何使用它,为什么这是好的?

jobtbby3

jobtbby31#

基本上是一种Redis的Set,它使用优化的算法来计算元素,避免了大量的内存消耗。SetHyperLogLog的区别在于,使用HyperLogLog,你只能添加,计算唯一的元素,并将一些HyperLogLog合并到另一个HyperLogLog中,所以基本上你不需要像在SET中那样将成员存储在HyperLogLog中,然后检索它们。您只是存储不同成员的示例,这就是HyperLogLog不提供检索其存储成员的命令的原因。
一个明显的用例可能是,如果您希望拥有一个巨大的SET,其中您希望对集合中的唯一数据的数量进行多次计数,您对集合中的数据不感兴趣,您只对消耗低内存感兴趣,即使集合增长很多。例如,假设您有一个影响力很大的系统,其中有大量用户,并且所有用户都非常活跃。并且您希望了解系统中每个网页的独立访问者数量。您希望实时更新,因此您将每秒钟查询每个网站的独立访问者。您可以为系统中的每个URI创建一个HyperLogLog,它将代表该网页,并且每次用户访问URL时,您都将PFAAD user_id:

全氟辛烷磺酸/api/show/concerts id789989

然后每隔一秒,您将对每个URL-HyperLogLog进行迭代,以获取唯一用户访问者的数量

产品计数/api/show/concerts

一四五五四二

产品计数/api/show/open-airs

  • 二五五六五二二三 *

您可能会说,是的,但是我可以通过使用SET来获得相同的功能,其好处是每个集合中的user_id都是成员。(第二个)您使用SCARD命令查询每个集合以获得唯一访问者的数量,您将花费甚至更多的内存,因此出于某种原因,您至少需要存储user_id,HyperLogLogs作为独特元素的计数器是更好的选择。对于我们的用例,想象一下有200-300个集合,其中大约有20- 30 k个用户。
HyperLogLog和Set命令之间的对应关系:

  • PFADD = SADD
  • PF计数= SCARD
  • PFMERGE =太阳
wlp8pajw

wlp8pajw2#

  • 我不认为它被认为是一种数据类型。它是一种算法,但在Redis中它被认为是类型
  • 这是一个非常复杂的算法,它查看字符串,对它进行一些解析,进行一些非常复杂的数学运算,并在某种程度上记住该字符串,但实际上并不存储它
  • 它与日志无关(我认为是)。每当我们想要跟踪不同元素集合的唯一性,特别是近似唯一性时,就使用它。
  • 类似于集合,但不存储元素
  • 它的运行时间为O(1)(恒定时间),并且使用非常少的内存-每个键最多12 kB内存。
  • HyperLogLog算法是概率性的,这意味着它不能保证100%的准确性,因为hyperloglog并没有真正存储这些单独的项目。Redis实现的HyperLogLog的标准误差为0.81%。这意味着如果你看到1000个视图,真实的的计数可能在991-1008之间。计算视图数量时出现此错误是可以的,但如果需要跟踪唯一的用户名或电子邮件,则应将其存储在集合中。

以下是几个可以使用HyperLogLogs的示例:
·统计访问网站的独立用户数
·统计在特定日期或时间在您的网站上搜索的不同术语的数量
·统计用户使用的不同标签的数量
·计算书中出现的不同单词的数量

相关问题