合并uniq计数器,概率数据结构
Merge uniq counters, probabilistic data structures
有两个集合 1 2 3
和 3 4
,具有 3
和 2
个独特的项目。
现在让我们计算合并集中的唯一项目。如果我们只是将计数器 3 + 2 = 5
加起来,那将是错误的(应该是 uniq(1 2 3 3 4) = 4
)。
有没有办法只使用计数器?对于每个计数器,可以使用一些额外的 constant memory 数据结构来表示原始集合,小错误也可以,假设 95% 的准确度是好的
我知道有概率唯一计数器使用很少的内存 (HyperLogLog)。但是有没有办法合并两个这样的概率计数器?
是的,HyperLogLog 实际上允许非常自然地合并,并且大多数实现都包括合并。简而言之,要将两个 HyperLogLog 结构 A 和 B 合并为一个新的 C,取每个桶对的最大值 C[i] = max(A[i],B[i]).
有两个集合 1 2 3
和 3 4
,具有 3
和 2
个独特的项目。
现在让我们计算合并集中的唯一项目。如果我们只是将计数器 3 + 2 = 5
加起来,那将是错误的(应该是 uniq(1 2 3 3 4) = 4
)。
有没有办法只使用计数器?对于每个计数器,可以使用一些额外的 constant memory 数据结构来表示原始集合,小错误也可以,假设 95% 的准确度是好的
我知道有概率唯一计数器使用很少的内存 (HyperLogLog)。但是有没有办法合并两个这样的概率计数器?
是的,HyperLogLog 实际上允许非常自然地合并,并且大多数实现都包括合并。简而言之,要将两个 HyperLogLog 结构 A 和 B 合并为一个新的 C,取每个桶对的最大值 C[i] = max(A[i],B[i]).