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.
13. Bloom Filters
I had a big data problem,
"I know, I'll use a bloom filter."
Now I'm not sure how many
problems I have, but I know
which ones I don't.
21. 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
41. Hash
It is theoretically impossible 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?
55. HyperLogLog
Ê = αm × m × média(2M(i), i<m)
α m=
αm= (0.7213 / (1 + 1.079 / m))
56. 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
Cada registro 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 Ê
63. Referências
Space/Time Trade-offs in Hash Coding with Allowable Errors (Bloom Filters)
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.2080
A Linear-Time Probabilistic Counting Algorithm for Database Applications
http://dblab.kaist.ac.kr/Publication/pdf/ACM90_TODS_v15n2.pdf
HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm
http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf
Hashing Explained - Google Guava
http://code.google.com/p/guava-libraries/wiki/HashingExplained
StreamLib
https://github.com/clearspring/stream-lib