2024-03-21 06:38:24 +08:00
|
|
|
# hll-err.rb - Copyright (C) 2014-Present Redis Ltd.
|
|
|
|
#
|
2025-05-01 21:04:22 +08:00
|
|
|
# Licensed under your choice of (a) the Redis Source Available License 2.0
|
|
|
|
# (RSALv2); or (b) the Server Side Public License v1 (SSPLv1); or (c) the
|
|
|
|
# GNU Affero General Public License v3 (AGPLv3).
|
2014-03-29 01:35:14 +08:00
|
|
|
#
|
|
|
|
# Check error of HyperLogLog Redis implementation for different set sizes.
|
|
|
|
|
|
|
|
require 'rubygems'
|
|
|
|
require 'redis'
|
|
|
|
require 'digest/sha1'
|
|
|
|
|
|
|
|
r = Redis.new
|
|
|
|
r.del('hll')
|
2014-03-29 05:25:26 +08:00
|
|
|
i = 0
|
|
|
|
while true do
|
|
|
|
100.times {
|
|
|
|
elements = []
|
|
|
|
1000.times {
|
|
|
|
ele = Digest::SHA1.hexdigest(i.to_s)
|
|
|
|
elements << ele
|
|
|
|
i += 1
|
|
|
|
}
|
2018-03-16 23:34:04 +08:00
|
|
|
r.pfadd('hll',elements)
|
2014-03-29 05:25:26 +08:00
|
|
|
}
|
2014-04-01 04:48:01 +08:00
|
|
|
approx = r.pfcount('hll')
|
2014-03-29 05:25:26 +08:00
|
|
|
abs_err = (approx-i).abs
|
|
|
|
rel_err = 100.to_f*abs_err/i
|
|
|
|
puts "#{i} vs #{approx}: #{rel_err}%"
|
|
|
|
end
|