问题标签 [hyperloglog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
801 浏览

amazon-redshift - 用于 Redshift 的 Postgresql-hll(或其他 Hyperloglog 数据类型/结构)

需要能够报告唯一身份访问者,但希望避免预先计算每个可能的键排列并创建多个表。

作为一个简单的示例,假设我需要在具有以下列的表中报告每月唯一身份

  • 日期(月/年)
  • page_id
  • country_id
  • device_type_id
  • 每月唯一

在 Druid 和 Redis 中,Hyperloglog 数据类型会解决这个问题(假设可以接受小的误差范围),我将能够通过任何维度组合运行查询并接收对唯一性的可行估计。

我能在 PostgreSQL 世界中找到的最接近的是 postgresql-hll 插件,但它似乎适用于 PostgreSQL 9.0+。

有没有一种方法可以在 Redshift 中表示这一点,而无需预先计算或存储访问者 ID(大大增加了表大小,但允许使用 RedShift 的“近似计数”hll 实现)?

注意:RedShift 是首选平台,但我已经知道其他自托管 PostgreSQL 分支可以支持这一点,例如 CitusDB。寻找使用 RedShift 执行此操作的方法。

0 投票
2 回答
609 浏览

database - 确定大型 redis 数据库中未使用键的百分比

我有一个 Redis 数据库,里面有数百万个键。随着时间的推移,我写入和读取的密钥发生了变化,因此有许多密钥我根本不再使用。大多数也没有任何类型的TTL。

我想了解 Redis 数据库中有多少百分比的键不再使用。我在想我可以使用 hyperloglog 来估计正在写入的键数量的基数,但似乎需要PFADD为每个被写入和读取的键做很多工作。

需要明确的是,我还不想删除任何内容,我只想对数据库中使用的键的数量进行一些分析。

0 投票
1 回答
504 浏览

redis - 如何清除 Redis HyperLogLog 中某个键的值

我正在使用 HyperLogLog 的 Redis 实现来计算给定键的不同值。

键基于小时窗口。日历小时更改后,我想重置传入值的计数。我没有看到任何直接的 API 可以通过 Jedis 来“清除”这些值。

SET 不能在这里使用,因为它会破坏散列。有没有办法正确“重置”给定键的计数?

0 投票
0 回答
60 浏览

algorithm - 支持从集合中删除的集合基数概率算法

考虑到必须支持从集合中删除元素,是否有任何用于计算集合基数的概率算法?我一直在使用 HyperLogLogs 来计算某些集合及其并集的基数,但是当出现从集合中删除元素的必要性时,我当前的解决方案变得不合适。也许您可以提供一些与该主题相关的研究或论文。

0 投票
2 回答
497 浏览

database - 具有单个哈希函数的 LogLog 算法如何工作

我已经找到了数十种关于 LogLog 算法基本思想的解释,但它们都缺乏关于哈希函数结果拆分如何工作的细节我的意思是使用单个散列函数并不精确,而使用多个函数太昂贵。他们如何克服单一哈希函数的问题?

这个答案是我找到的最好的解释,但对我来说仍然没有意义:

他们使用一个哈希,但将其分为两部分。一个称为桶(桶的总数为 2^x),另一个 - 与我们的哈希基本相同。我很难理解发生了什么,所以我举个例子。假设你有两个元素,你的哈希函数给出的值从 0 到 2^10 产生了 2 个值:344 和 387。你决定有 16 个桶。所以你有了:

你能解释一下上面的例子吗?你应该有 16 个桶,因为你有长度为 4 的标题,对吧?那么如何才能拥有 16 个只有两个哈希的桶呢?我们只估计桶,对吗?所以第一个桶大小为 1,第二个桶大小为 4,对吧?如何合并结果?

0 投票
1 回答
158 浏览

integration-testing - 使用 HyperLogLog 对代码进行可靠的集成测试?

我们在 Algebird 中使用 Twitter 的 HyperLogLog 实现。给定一个数字 N 和我们系统中的一个检查,它使用 HyperLogLog 来估计逐渐增长的集合的当前大小并测试它是否大于或小于 N,我们如何编写一个集成或系统测试来测试这个检查并且是几乎可以保证通过,如果我们调用 HyperLogLog 的代码是正确的?被测系统是不确定的,因为一方面它是多线程的。

我的第一个想法是,为这个用例编写可靠的集成测试的正确方法是“放弃我们的标准”。那么要发布到端点以确保 HyperLogLog 将估计项目总数大于 N 的项目总数(M)是多少,并且概率 >= 0.999999?

还是有更好的方法?

标准错误范围是可配置的,但这并不能直接告诉我们有时可能会看到的最大错误范围 - 这是我关心的,以避免在 master 上随机失败的 CI 构建导致浪费时间和头发-拉!

我还担心我们在测试中生成随机数据的方式可能不会在相关方面生成均匀分布的随机数据,这可能会对概率计算产生重大影响。

0 投票
1 回答
395 浏览

cassandra - 使用 Spark 批处理 + Cassandra 实现 HyperLogLog

我正在寻找实现 HyperLogLog 算法来计算不同细分受众群(或过滤器)的不同用户。我使用 Cassandra + Spark 批处理。想知道 Cassandra 是否为 HyperLogLog 类型提供任何支持。

我找不到任何插件或任何相关的东西,除了http://vilkeliskis.com/blog/2013/12/28/hacking_cassandra.html这是一个很好的尝试但未完成。

感谢您提供任何可能的提示!

0 投票
1 回答
830 浏览

node.js - 使用 Redis 和 MongoDB (HyperLogLog) 计算唯一性

我在 MongoDB 中有一个带有示例文档的集合,如下所示 -

问题陈述

我应该能够在获取不同数量的 IP 时对任何字段进行分组。

聚合查询 -

给出了预期的结果,但速度很慢。ip同样,使用另一个计数$group很慢。输出是 -

我试过的

我考虑过为此使用 Hyperloglog。我尝试使用 Redis 实现。我尝试流式传输整个数据,仅将我分组的内容投影PFADD到redis中相应的hyperloglog结构中。

逻辑看起来像 -

我试图运行这个超过一百万个数据点。要流式传输的数据大小约为 1GB,Mongo 和 Node 服务器之间的连接速度为 1 Gbps。我曾预计这段代码会运行得足够快。但是,它非常慢(比在 MongoDB 中计数要慢)。

我想过但没有实现的另一件事是为每个类预先创建存储桶,并随着数据的流入实时增加它们。但是支持任意分组所需的内存是巨大的,所以不得不放弃这个想法。

请提出我可能做错了什么,或者我可以在这里改进什么,以便我能够充分利用 hyperloglog(我不受 Redis 的限制,并且可以接受任何实现)

0 投票
1 回答
219 浏览

python - 无法识别 Redis 上的 HyperLogLog 实现

我试图在这里运行一个简单的代码,它只是使用 PFADD 操作将一个值插入到一个键中,但我得到了这个错误:

响应错误:未知命令“PFADD”

我的代码如下:

  • Python版本:2
  • 熊猫版本:0.19.0
  • Redis 版本:2.10.5`

我在这里错过了什么吗?

0 投票
1 回答
64 浏览

data-structures - 合并 uniq 计数器,概率数据结构

有两套1 2 3和独特的项目。3 432

现在让我们计算合并集中的唯一项目。如果我们只是总结计数器3 + 2 = 5,那将是错误的(应该是uniq(1 2 3 3 4) = 4)。

有没有办法只使用计数器来做到这一点?对于每个计数器,可以使用一些额外的常量内存数据结构来表示原始集合,小错误也可以,假设 95% 的准确度是可以的。

我知道有使用很少内存(HyperLogLog)的概率唯一计数器。但是有没有办法合并两个这样的概率计数器?