- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在研究 Redis 支持的数据结构,但找不到可以让我理解什么是 HyperLogLog 的解释。
我如何使用它,为什么它有好处?
最佳答案
基本上是一种 Redis Set
,它使用优化的算法通过避免大量消耗内存来计算元素。 Set
和 HyperLogLog
之间的区别在于,对于 HyperLogLog,您可以添加、计算唯一元素并将一些 HyperLogLog 合并到另一个中,所以基本上您不存储HyperLogLog 中的成员,就像您在 SET 中所做的那样,并检索它们,您只需存储不同成员的出现,这就是 HyperLogLog 不提供检索其存储成员的命令的原因。
一个明确的用例可能是,如果你想拥有一个巨大的 SET,你想计算集合中唯一数据的数量的这么多倍,你对集合中的哪些数据不感兴趣,你只感兴趣即使集合增长很多,也会消耗低内存。例如,假设您有一个具有大量用户且所有用户都非常活跃的高影响力系统,并且您有兴趣了解系统每个网页中的唯一身份访问者的数量。您希望实时更新,因此您将每秒查询每个网站的唯一身份访问者。您可以为系统中的每个 URI 创建一个 HyperLogLog,它将代表该网页,并且每次用户访问一个 URL 时,您都会 PFAAD user_id:
PFAAD /api/show/concerts id789989
然后你将每秒迭代每个 URL-HyperLogLog 以获得唯一用户访问者的数量
PFCOUNT /api/show/concerts
145542
PFCOUNT /api/show/open-airs
25565223
你会说,是的,但我可以通过使用 SET 获得相同的功能,好处是将每个集合中的 user_id 作为成员。是的,你可以,但是你会通过使用集合消耗大量内存,每次(秒)你查询每个集合以使用 SCARD 命令获取唯一访问者的数量,你会花费更多的内存,所以至少你需要存储 user_ids出于某种原因,HyperLogLogs 作为独特元素的计数器是更好的选择。对于我们的用例,假设有 200-300 个集合,里面有大约 20-30k 的用户。
HyperLogLog与Set命令的对应关系:
关于database - 什么是 hyperloglog,它有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49261930/
什么是基数估算 HyperLogLog 是一种基数估算算法。所谓基数估算,就是估算在一批数据中,不重复元素的个数有多少。 从数学上来说,基数估计这个问题的详细描述是:对于一个数据流 {x1,x2,…,
我最近在业余时间学习了不同的算法,我遇到了一个看起来非常有趣的算法,它被称为 HyperLogLog 算法 - 它估计列表中有多少个独特的项目。 这对我来说特别有趣,因为它让我回到了 MySQL 时代
我自己实现了 HyperLogLog algorithm .它运行良好,但有时我必须获取大量(大约 10k-100k)HLL 结构并合并它们。 我将它们中的每一个都存储为一个位串,所以首先我必须将每个
有那么多 Hyperloglog 实现,但是您如何验证/测试 Hyperloglog 实现?要检查它的“准确性”,它是“错误”绑定(bind)行为吗?只是扔一些静态测试用例看起来很无效。 更具体地说,
HyperLogLog 估计多重集的基数。是否可以扩展它来处理多个多重集?比如,它不仅支持查询 estimateCardinality(),还支持 estimateCardinality(multis
HyperLogLogFlajolet 等人的算法描述了一种估计基数的巧妙方法一组只使用少量内存。然而,它确实考虑到了在计算中考虑原始集合的所有 N 个元素。如果什么我们只能访问原始 N 的一小部分随
我有以下代码片段来测试我是否可以在 Redis 中添加 HLL 值,这个测试通过了,但是当我从 redis 命令行验证它时,我没有看到“HLLTEST”键,而是我发现了奇怪的键您可以从以下输出中看到。
我正在阅读 antirez.com 和维基百科以及其他一些资源以了解 HLL 是什么以及它是如何工作的,但每次使用术语“Leading Zeroes”时我都会犯错。当我们谈论 HyperLogLog
我正在研究 Redis 支持的数据结构,但找不到可以让我理解什么是 HyperLogLog 的解释。 我如何使用它,为什么它有好处? 最佳答案 基本上是一种 Redis Set,它使用优化的算法通过避
我们在 Algebird 中使用 Twitter 的 HyperLogLog 实现。给定一个数字 N 和我们系统中的一个检查,它使用 HyperLogLog 来估计一个逐渐增长的集合的当前大小并测试它
我们目前面临一个有趣的问题。我们想要估计一个集合的基数而不需要存储每一个项目(通常位图/位集是一个很好的方法)。一个非常好的算法是所谓的 HyperLogLog 随机算法(更多信息请参见此处 http
如果我想获取可添加和删除的元素列表中的唯一计数,有没有办法做到这一点? 例如 add key1 delete key1 add key1 应该给出一个唯一的计数 1 但是如果我有一个 2 hll 的简
关于 HyperLogLog 算法一直困扰我的一点是它对 key 散列的依赖。我遇到的问题是,这篇论文似乎假设我们在每个分区上都有一个完全随机的数据分布,但是在它经常使用的上下文中(MapReduce
redis HLL 是否有 SMEMBERS 的等价物我需要计算一个数组中的所有唯一元素,还需要获取唯一成员的列表PFADD & PFCOUNT 会给我计数。我将如何获得成员。 我想使用 PFADD
我试图在这里运行一个简单的代码,它只是使用 PFADD 操作将一个值插入到一个键中,但是我得到了这个错误: ResponseError: unknown command 'PFADD' 我的代码如下:
在 redis 中,我们将 hyperLogLog 设置为不同的元素。 众所周知,对于每个 key ,HLL 仅消耗 12kb 内存并产生标准误差为 0.81% 的近似值 因为我有太多要计算的元素。所
我对 Redis HyperLogLog 的工作原理以及何时使用它有一些基本的想法。 在使用它之前,我做了一个测试:我pfadd将一些连续的数字输入到一个 HLL 条目(以模拟用户 ID),Redis
我正在使用 HyperLogLog 的 Redis 实现来计算给定键的不同值。 键基于小时窗口。日历小时更改后,我想重置传入值的计数。我没有看到任何用于通过 Jedis ‘清除’值的直接 API。 S
我正在使用 redis-cli 学习 HyperLogLogs 示例 The redis-cli examples show how you can use HyperLogLog commands
HyperLogLog s占用12KB空间。我在文档中没有看到有关何时释放该存储空间的任何信息。 我目前的计划是调用EXPIRE每次我打电话PFADD ,但我找不到太多关于过期 HLL 的讨论,所以我
我是一名优秀的程序员,十分优秀!