O documento discute estruturas de dados probabilísticas para lidar com grandes volumes de dados, como Bloom Filters, Hit Counting e HyperLogLog. Essas estruturas permitem estimar cardinalidades de forma eficiente em termos de espaço e tempo.
Bloom Filters
g(x) 1
x
h(x)
0
h(y) 1
0
y
g(y)
0
h(z) 1
z g(z) 0
1
22.
Bloom Filters
adicionar!(item):
para cada hash em hashes:
V[hash(item)] ← 1
contém?(item):
para cada hash em hashes:
se V[hash(item)] = 0:
retorne falso
retorne verdadeiro
23.
Bloom Filters
100M itens
4 funções de hash
625Mbits (78MB)
5% de erro
24.
Bloom Filters
100M itens
5 funções de hash
1Gbit (128MB)
1% de erro
25.
Bloom Filters
100M itens
7 funções de hash
2Gbit (256MB)
0.01% de erro
Hash
It is theoreticallyimpossible to define a
hash function that creates random
data from non-random data in actual
files. But in practice it is not difficult to
produce a pretty good imitation of
random data.
Donald Knuth
42.
HyperLogLog
Qual a
probabilidade dos n
primeiros bits
serem 0...01?
HyperLogLog
adicionar!(item):
x ←hash(item)
i ← log2m primeiros bits de x
v ← pos. do primeiro 1 nos bits restantes de x
M(i) ← max(M(i), v)
quantos?:
retorne αm × m × média(2M(i), i<m)
57.
HyperLogLog
média aritmética:
(M(0) + M(1) + ... + M(m-1)) / m
média geométrica:
(M(0) × M(1) × ... × M(m-1))1/m
média harmônica:
m / (M(0)-1 + M(1)-1 + ... + M(m-1)-1)
58.
HyperLogLog
Cadaregistro de M tem 5 bits.
Por isso "LogLog":
32
log2(log2(2 )) = 5
Registradores Erro
m (104/√m) %
m = 2048 (1.25KB) 2.3%
m = 65536 (40KB) 0.4%
m = 1048576 (648KB) 0.1%
59.
HyperLogLog
Para baixas
cardinalidades, o erro
relativo aumenta.
60.
HyperLogLog
quantos?:
Ê← αm × m × média(2M(i), i<m)
se Ê < 2.5 × m:
z ← número de zeros em M
retorne -m × log(z/m)
senão:
retorne Ê