问题很简单:我需要根据Redis的表示找到最佳策略来实现准确的HyperLogLog联合——这包括在数据结构导出以供其他地方使用时处理它们的稀疏/密集表示。两种策略有两种策略,其中一种似乎简单得多。我查看了实际的Redis源代码,我遇到了一些麻烦(我自己在C中并不大)弄清楚从精度和效率的角度来看使用他们的内置结构/例程还是开发我自己的更好.对于它的值(value),我愿意牺牲空间和某种程度的错误(stdev+-2%)来追求极大集合的效率。1。包容原则到目前为止,这是两者中最简单的一个——本质上,我只是将无损联合(PFMERGE)与此原理结合使用来计算重叠的估计值。测试似乎表明在许多情况
我在哪里可以找到LogLogalgorithm的有效实现??曾尝试自己实现,但我的实现草案产生了奇怪的结果。Here它是:functionLogLog(max_error,max_count){functionlog2(x){returnMath.log(x)/Math.LN2;}varm=1.30/max_error;vark=Math.ceil(log2(m*m));m=Math.pow(2,k);vark_comp=32-k;varl=log2(log2(max_count/m));if(isNaN(l))l=1;elsel=Math.ceil(l);varl_mask=((1>
我在哪里可以找到LogLogalgorithm的有效实现??曾尝试自己实现,但我的实现草案产生了奇怪的结果。Here它是:functionLogLog(max_error,max_count){functionlog2(x){returnMath.log(x)/Math.LN2;}varm=1.30/max_error;vark=Math.ceil(log2(m*m));m=Math.pow(2,k);vark_comp=32-k;varl=log2(log2(max_count/m));if(isNaN(l))l=1;elsel=Math.ceil(l);varl_mask=((1>
redisHLL是否有SMEMBERS的等价物我需要计算一个数组中的所有唯一元素,还需要获取唯一成员的列表PFADD&PFCOUNT会给我计数。我将如何获得成员。我想使用PFADD而不是SADD,因为这可能会变成一个大数据集并且可能会溢出内存 最佳答案 不,没有-HyperLogLog本身不存储“成员”。它包含观察到的内容的简洁表示,并且无法转换回实际数据。您可以通过谷歌搜索或访问http://antirez.com/news/75了解有关其工作原理的更多信息 关于redis-获取red
我试图在这里运行一个简单的代码,它只是使用PFADD操作将一个值插入到一个键中,但是我得到了这个错误:ResponseError:unknowncommand'PFADD'我的代码如下:importpandasaspdimportredisr=redis.StrictRedis(host='localhost',port=6379,db=0)r.pfadd("k",2,3,4,4,5,6,7,3,4,)Python版本:2Pandas版本:0.19.0Redis版本:2.10.5`我是不是漏掉了什么? 最佳答案 发出r.execut
我对RedisHyperLogLog的工作原理以及何时使用它有一些基本的想法。在使用它之前,我做了一个测试:我pfadd将一些连续的数字输入到一个HLL条目(以模拟用户ID),Redis很快给出了一个误报结果。确切地说,如果您pfadd数字193到HLL条目,则将报告数字202已存在于该条目中。你可以在redis-cli中测试它:127.0.0.1:6379>delns(integer)0127.0.0.1:6379>PFADDns193(integer)1127.0.0.1:6379>PFADDns202(integer)0我知道HyperLogLog是一种概率数据结构,但是HLL这
HyperLogLogs占用12KB空间。我在文档中没有看到有关何时释放该存储空间的任何信息。我目前的计划是调用EXPIRE每次我打电话PFADD,但我找不到太多关于过期HLL的讨论,所以我想知道我是否做错了......我计划使用HLL实时计算我网站上的活跃访问者数量。我只想保留过去一小时的计数,释放比这更早的任何内容。 最佳答案 不,您不能使添加到HLL的项目过期。相反,EXPIRE命令将使整个HLL过期。为了实现您的目标,您可以每小时创建一个HLL,并在一段时间后使整个HLL过期。//forthe2019082200PFADDu
我正在研究Redis支持的数据结构,但找不到可以让我理解什么是HyperLogLog的解释。我如何使用它,为什么它有好处? 最佳答案 基本上是一种RedisSet,它使用优化的算法通过避免大量消耗内存来计算元素。Set和HyperLogLog之间的区别在于,对于HyperLogLog,您可以添加、计算唯一元素并将一些HyperLogLog合并到另一个中,所以基本上您不存储HyperLogLog中的成员,就像您在SET中所做的那样,并检索它们,您只需存储不同成员的出现,这就是HyperLogLog不提供检索其存储成员的命令的原因。一个
假设我在redis中有一个hyperloglog,它对消息进行计数是否有任何规定我可以在某种程度上解释删除消息? 最佳答案 不,HyperLogLog不支持删除的概念。相反,使用不同的计数器(可以是整数、Set或HyperLogLog)并减去总数。 关于redis-是否可以减少Redis中的HyperLogLog集,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/42250100/
如果你被面试到redis,通常对方会问你用过什么数据结构,如果你说使用过hyperloglog那绝对是个加分项,因为对方知道你正在处理基于海量数据和高并发下的问题。上一节我们使用min-count-sketch算法统计了海量数据下给定元素的重复次数,而hyperloglog正好反过来,它统计整个数据集中不同元素的个数。在传统应用场景下,实现这个目标的常用方法是使用哈希表,我们遍历一次所有元素,然后看看哈希表是否已经有了对应元素,最后再遍历一次哈希表就能得到不同元素的个数。这种做法存在问题是,在海量数据情况下,哈希表很可能要存储大量数据,特别是重复元素比较少时,哈希表要占用的内存就很大,而且数据