This is a native HyperLogLog lib (A wrap for avz/hll).
HLL
12,555,981 op/s » add const string
11,999,272 op/s » add const buffer
5,545,313 op/s » add cnt++
2,477,867 op/s » add random
1,380,207 op/s » toBuffer
6,964 op/s » intersection
bits | size (bytes) | standard error |
---|---|---|
4 | 16 | 26.00% |
5 | 32 | 18.38% |
6 | 64 | 13.00% |
7 | 128 | 9.19% |
8 | 256 | 6.50% |
9 | 512 | 4.60% |
10 | 1024 | 3.25% |
11 | 2048 | 2.30% |
12 | 4096 | 1.62% |
13 | 8192 | 1.15% |
14 | 16384 | 0.81% |
15 | 32768 | 0.57% |
16 | 65536 | 0.41% |
17 | 131072 | 0.29% |
18 | 262144 | 0.20% |
19 | 524288 | 0.14% |
20 | 1048576 | 0.10% |
const HLL = require('node-hll');
const hll = new HLL(5);
// Add item to hll counter.
hll.add('1');
hll.add(new Buffer('2'));
console.log(hll.bits);
console.log(hll.count());
console.log(hll.toBuffer());
// Create HLL from buffer.
console.log(new HLL(hll.toBuffer()).count());
const hll2 = new HLL(5);
hll2.add('3');
hll2.merge(hll);
console.log(hll2.count());
const hll3 = new HLL(5);
hll3.add('8');
hll3.add('1');
console.log(HLL.intersectionSize([hll, hll2]));
console.log(HLL.intersectionSize([hll, hll2, hll3]));