redis HLL 误报太多

2024-01-17

Hyperlog日志是一种概率算法 根据 redis HLL 文档,我们可能会得到 0.81% 的错误,但我得到的错误是 17-20%

我认为有问题..这是我的简单 perl 测试脚本。有没有什么错误

#!/usr/bin/perl -w                                                                                                                                                       
use Redis;
my $redis = Redis->new(server=>'192.168.50.166:6379') or die;
my $fp=0;
my $HLL="HLL";

$redis->del($HLL);
foreach my $i (1..10000) {
  my $s1 = $redis->pfadd($HLL,$i);
  if($s1 == 0){ 
    print "False positive on $i\n";
    $fp++;
  }
}
print "count of false positives $fp\n";

HyperLogLog用于计算唯一项目。它可以用很少的内存来计算大量的项目。但是,返回的基数并不精确,而是近似为standard error.

0.81% is the standard error,而不是误报。对于您的实例,您可以调用PFCOUNT HLL获取您放入的唯一项目的大约数量HyperLogLog。返回的数字应该在以下范围内[10000 * (1 - 0.81%), 10000 * (1 + 0.81%)].

PFADD如果执行命令后估计基数发生更改,则返回 1。否则返回 0。与以下无关false positive.

看来你需要的是布隆过滤器 https://en.wikipedia.org/wiki/Bloom_filter,它可以告诉您数据集中是否已存在某个项目,并且存在误报。您可以实施一个Bloom Filter当然是使用 Redis。应该有一些开源项目来实现这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis HLL 误报太多 的相关文章

随机推荐

  • Android listview with Glide - 加载后位图加倍

    我正在开发一个安卓应用程序 我的片段之一包含一个简单的列表视图 显示朋友列表 每个朋友都可以有自己的个人资料图片 它是由 Glide 库设置的 当用户没有设置个人资料图片时 将显示默认图像 我的问题是 每次列表中的第一个元素都会获得与列表的
  • 如何使用 QEMU 的简单跟踪后端?

    这是后续this https stackoverflow com questions 37522552 qemu simple backend tracing dosent print anything comment65639854 37
  • javascript:禁用文本选择

    我正在使用 javascript 禁用网站上的文本选择 代码是 可以找到类似的脚本here http rainbow arch scriptmania
  • 使用声明隐藏名称

    include
  • prefix(_ maxLength:) 与符合 LazySequenceProtocol 的结构一起使用时会被类型擦除

    prefix maxLength returns a type erased Sequence in the following codeEXAMPLE http swift sandbox bluemix net repl 599df10
  • 下载文件时如何针对不同浏览器正确设置中文文件名

    我这样设置 response setHeader content disposition attachment filename URLEncoder encode 你好 txt utf 8 它在 Chrome 中有效 但在 Firefox
  • 如何将一个向量的参数插入另一个向量?

    我有一个大小为 5 的 重心 向量 parameter Length barycenters 5 1 2 3 4 5 我想将此向量的参数添加到另一个大小为 7 的向量 b prime 中 这意味着打算让 b prime 0 1 2 3 4
  • 闪亮动态添加输入字段和数据而无需重新渲染

    我正在尝试动态地将新变量添加到正在运行的闪亮应用程序中 但如果我开始编辑一个变量 则每次我添加其他变量时 值 文本和数字 都会重置 这example https stackoverflow com a 56468913 4083743无需使
  • 什么是好的“模板”Yosys 合成脚本?

    我想编写自己的 Yosys 综合脚本 从什么开始是一个好的模板 手册和网页包含各种示例 但没有 权威 的 hello world 示例 The synth命令运行通用综合任务的推荐脚本 看help synth http www cliffo
  • 函数调用后记住数组值

    如果我这样写 c def cf n c range 5 print c if any i gt 3 for i in c is True print hello cf 1 print c 然后我得到 1 2 3 4 hello 我对编程真的
  • 在 PyCharm IDE 5.0.4 中运行特定的单元测试函数

    我正在尝试使用 PyCharm 进行单元测试 使用unittest 并且能够使其工作 测试运行器很好地显示了测试用例和嵌套测试函数的列表 但是 一旦发现测试 我就找不到任何方法来 重新 运行特定的测试函数 唯一可用的按钮将运行整个测试列表
  • 如何解码 JSFuck 脚本?

    我在 JavaScript 中有这样的代码 在控制台中 它将返回 Array filter 如何解码大量与上面文本相似的文本 例如
  • 获取用户当前位置 iOS 8.0

    我尝试使用 MapKit 和 CoreLocation 获取用户当前位置 我对 Objective C 真的很陌生 就我的研究而言 旧版 iOS 到 iOS 8 0 的实现略有不同 我已经正确地遵循了一切 它仍在获取当前位置 我的实际目标是
  • 清除 Bootstrap 中的表单输入字段?

    Bootstrap 是否提供了通过按钮清除表单输入字段的功能 或者我需要通过 jquery 自己推出 从这篇文章jQuery Validate resetForm 不会重置 onFocus 验证 https stackoverflow co
  • 更改 config.assets.version 号有什么作用?

    更改 config assets version 号有什么作用 我知道资产会过期 正如评论中所写 但它在后台会做什么 它会删除所有已编译的资源吗 或者它是否采用该版本号并在其他地方使用它 它将使用另一个指纹 代码附加到文件名 来预编译资产
  • 量角器关闭当前选项卡

    我有一个非角度页面 我需要点击 2 个链接 单击自动在新选项卡中打开的链接之一时 现在我切换到新选项卡并设置browser ignoreSynchronization false因为新打开的选项卡是一个有角度的窗口 并调用我的测试之一 一经
  • 如何用权重标记图边

    Warning 当 Mathematica v 8 0 是最酷的孩子时 我发布了这个问题 该bug已于9 0 1版本解决 The help for EdgeLabels http reference wolfram com mathemat
  • Spark 中函数返回空列表

    下面是获取压缩文件中文件名列表的代码 def getListOfFilesInRepo zipFileRDD RDD String PortableDataStream List String val zipInputStream zipF
  • 如何从 MVC3 中的控制器调用 javascript 函数

    我环顾四周 找不到解决方案 因此我发现自己在这里 根据我所读到的内容 我可以使用 RegisterClientScript 或 RegisterClientScriptBlock 在 ASP NET Web 表单中执行此操作 我在任何 MV
  • redis HLL 误报太多

    Hyperlog日志是一种概率算法 根据 redis HLL 文档 我们可能会得到 0 81 的错误 但我得到的错误是 17 20 我认为有问题 这是我的简单 perl 测试脚本 有没有什么错误 usr bin perl w use Red