我正在研究Redis支持的数据结构,我无法找到一个解释,可以让我理解什么是HyperLogLog。我如何使用它,为什么这是好的?
jobtbby31#
基本上是一种Redis的Set,它使用优化的算法来计算元素,避免了大量的内存消耗。Set和HyperLogLog的区别在于,使用HyperLogLog,你只能添加,计算唯一的元素,并将一些HyperLogLog合并到另一个HyperLogLog中,所以基本上你不需要像在SET中那样将成员存储在HyperLogLog中,然后检索它们。您只是存储不同成员的示例,这就是HyperLogLog不提供检索其存储成员的命令的原因。一个明显的用例可能是,如果您希望拥有一个巨大的SET,其中您希望对集合中的唯一数据的数量进行多次计数,您对集合中的数据不感兴趣,您只对消耗低内存感兴趣,即使集合增长很多。例如,假设您有一个影响力很大的系统,其中有大量用户,并且所有用户都非常活跃。并且您希望了解系统中每个网页的独立访问者数量。您希望实时更新,因此您将每秒钟查询每个网站的独立访问者。您可以为系统中的每个URI创建一个HyperLogLog,它将代表该网页,并且每次用户访问URL时,您都将PFAAD user_id:
Set
HyperLogLog
全氟辛烷磺酸/api/show/concerts id789989
/api/show/concerts id789989
然后每隔一秒,您将对每个URL-HyperLogLog进行迭代,以获取唯一用户访问者的数量
产品计数/api/show/concerts
/api/show/concerts
一四五五四二
产品计数/api/show/open-airs
/api/show/open-airs
您可能会说,是的,但是我可以通过使用SET来获得相同的功能,其好处是每个集合中的user_id都是成员。(第二个)您使用SCARD命令查询每个集合以获得唯一访问者的数量,您将花费甚至更多的内存,因此出于某种原因,您至少需要存储user_id,HyperLogLogs作为独特元素的计数器是更好的选择。对于我们的用例,想象一下有200-300个集合,其中大约有20- 30 k个用户。HyperLogLog和Set命令之间的对应关系:
wlp8pajw2#
hyperloglog
以下是几个可以使用HyperLogLogs的示例:·统计访问网站的独立用户数·统计在特定日期或时间在您的网站上搜索的不同术语的数量·统计用户使用的不同标签的数量·计算书中出现的不同单词的数量
2条答案
按热度按时间jobtbby31#
基本上是一种Redis的
Set
,它使用优化的算法来计算元素,避免了大量的内存消耗。Set
和HyperLogLog
的区别在于,使用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命令之间的对应关系:
wlp8pajw2#
hyperloglog
并没有真正存储这些单独的项目。Redis实现的HyperLogLog的标准误差为0.81%。这意味着如果你看到1000个视图,真实的的计数可能在991-1008之间。计算视图数量时出现此错误是可以的,但如果需要跟踪唯一的用户名或电子邮件,则应将其存储在集合中。以下是几个可以使用HyperLogLogs的示例:
·统计访问网站的独立用户数
·统计在特定日期或时间在您的网站上搜索的不同术语的数量
·统计用户使用的不同标签的数量
·计算书中出现的不同单词的数量