问题很简单:我需要根据 Redis 的表示找到最佳策略来实现准确的 HyperLogLog 联合——这包括在数据结构导出以供其他地方使用时处理它们的稀疏/密集表示。
有两种策略,其中一种似乎简单得多。我查看了实际的 Redis 源代码,我遇到了一些麻烦(我自己在 C 中并不大)弄清楚从精度和效率的角度来看使用他们的内置结构/例程还是开发我自己的更好.对于它的值(value),我愿意牺牲 空间 和某种程度的错误 (stdev +-2%) 来追求极大集合的效率。
到目前为止,这是两者中最简单的一个——本质上,我只是将无损联合 (PFMERGE) 与此原理结合使用来计算重叠的估计值。测试似乎表明在许多情况下这种运行可靠,尽管我无法准确处理野外效率和准确性(某些情况下会产生 20-40% 的错误,这在这个用例中是 Not Acceptable )。
基本上:
aCardinality + bCardinality - intersectionCardinality
或者,在多组的情况下......
aCardinality + (bCardinality x cCardinality) - intersectionCardinality
似乎在很多情况下都非常准确,但我不知道我是否相信它。虽然 Redis 有许多内置的低基数修饰符,旨在规避已知的 HLL 问题,但我不知道在大小差异很大的情况下是否仍然存在严重不准确的问题(使用包含/排除)...
这种方式看起来更有趣,但我的一部分感觉它可能在计算上与 Redis 的一些现有优化重叠(即,我不是从头开始实现我自己的 HLL 算法)。
通过这种方法,我将使用 MinHash 算法对 bin 进行随机抽样(我认为 LSH 实现不值得这么麻烦)。这将是一个单独的结构,但通过使用 minhash 获取集合的 Jaccard 索引,您可以随后有效地将联合基数乘以该索引以获得更准确的计数。
问题是,我不是很精通 HLL,虽然我很想深入研究 Google 论文,但我需要一个可行的短期实现方案。有可能我忽略了 Redis 的现有优化或算法本身的一些基本考虑因素,这些考虑因素允许计算成本低廉的交集估计具有相当宽松的置信区间。
因此,我的问题:
如果我愿意牺牲空间(并且在小程度上,准确性),我如何使用 redis 最有效地获得 N 大(十亿)组的计算成本低的交集估计?
最佳答案
前段时间读过这篇论文。可能会回答你的大部分问题。包含原则不可避免地会在大量集合中加入误差范围。 Min-Hash 方法将是可行的方法。
关于hash - 在 Redis 中交叉巨大的 HyperLogLogs 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30106633/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer