Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 有没有有效的方法来减少HyperLogLog(redis)中的错误?_Database_Algorithm_Data Structures_Redis_Hyperloglog - Fatal编程技术网

Database 有没有有效的方法来减少HyperLogLog(redis)中的错误?

Database 有没有有效的方法来减少HyperLogLog(redis)中的错误?,database,algorithm,data-structures,redis,hyperloglog,Database,Algorithm,Data Structures,Redis,Hyperloglog,在redis中,我们将hyperLogLog视为设置为不同的元素 众所周知,对于每个键,HLL只消耗12kb内存,并产生标准误差为0.81%的近似值 因为我有很多元素要计算。因此,这里我想通过将元素存储到多个hll键(例如“hll_键%d”%(元素mod 1024))来降低错误率 事实上,这是降低误差的有效方法吗? 或者通过任何其他方式来实现?不,您不能通过将键分片到多个Hyperlog来降低错误。无论使用多少HyperLogLogs,错误始终为0.81% 除非修改源代码,否则无法降低错误 视情

在redis中,我们将hyperLogLog视为设置为不同的元素

众所周知,对于每个键,HLL只消耗12kb内存,并产生标准误差为0.81%的近似值

因为我有很多元素要计算。因此,这里我想通过将元素存储到多个hll键(例如“hll_键%d”%(元素mod 1024))来降低错误率

事实上,这是降低误差的有效方法吗?
或者通过任何其他方式来实现?

不,您不能通过将键分片到多个Hyperlog来降低错误。无论使用多少HyperLogLogs,错误始终为0.81%


除非修改源代码,否则无法降低错误

视情况而定。如果插入元素的数量明显大于Redis实现中2^14的寄存器数量,则可以假定HyperLogLogs的错误为正态分布。如果元素在多个HyperLogLog上平均分片,并且每个HyperLogLog的元素数仍然大于寄存器数,则通过将所有HyperLogLog的基数估计相加而获得的总基数估计将具有较小的误差

原因是,N个独立且正态分布的数字的总和,平均数M和标准误差S,将是正态分布的,平均数N x M和标准误差S x SQRT(N)。因此,相对误差从S/M变为S x SQRT(N)/(N x M)=S/(M x SQRT(N)),这对应于SQRT(N)的改进

但是,这种分片方法不适用于任意数量的超日志。一旦部分基数下降到寄存器数以下,就会违反正态分布误差的假设,估计误差的改善将更小,甚至可以忽略