Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Estruturas de DadosProbabilísticas para lidar com   DADO PRA CARAMBAJuan Lopes@juanplopes
Bloom Filters (1970)Hit Counting (1990)HyperLogLog (2007)
Detectar duplicaçõesindexar(documento):  se documento não está indexado:    lucene.indexar(documento)
Detectar duplicaçõesindexar(documento):  se documento não está indexado:    lucene.indexar(documento)
Consultar no disco?
Consultar no disco?
Consultar em memória?              HashSet<T>
Consultar em memória?      100M ids
Consultar em memória?  100M ids × 32 chars / id
Consultar em memória? 100M ids × 104 bytes / id        > 10GB
Consultar em memória? 100M ids × 104 bytes / id        > 10GB
Bloom Filters      I had a big data problem,  "I know, Ill use a bloom filter."Now Im not sure how manyproblems I have, bu...
Bloom Filters    Adicione!(item)     Contém?(item)
Bloom Filters     Contém?(item)       não 100%       sim ~95%
Bloom Filters                       0   x                h(x)                       0                       1             ...
Bloom Filters                        1   x                 h(x)                        0                        1         ...
Bloom Filters                        1   x                 h(x)                        0                        1         ...
Bloom Filtersadicionar!(item):  V[hash(item)] ← 1contém?(item):  retorne V[hash(item)] = 1
Bloom Filters      100M itens    2Gbits (256MB)      5% de erro
Bloom Filters                           g(x)   1   x                          h(x)                                  0     ...
Bloom Filtersadicionar!(item):  para cada hash em hashes:    V[hash(item)] ← 1contém?(item):  para cada hash em hashes:   ...
Bloom Filters       100M itens   4 funções de hash   625Mbits (78MB)      5% de erro
Bloom Filters       100M itens   5 funções de hash     1Gbit (128MB)      1% de erro
Bloom Filters       100M itens   7 funções de hash    2Gbit (256MB)    0.01% de erro
Bloom Filters Probabilidade de falso       positivo:
Cardinalidade Quantos ips distintos  acessaram o site na     última hora?
CardinalidadeQual a cardinalidade do       stream S?
Consultar em memória?              HashSet<T>
Usando HashSetadicionar!(item):  S ← S ∪ { item }quantos?:  retorne |S|
Consultar em memória?  >10K eventos/s
Consultar em memória?> 10K eventos/s × 3.600s/h× 100 bytes / evento       > 3GB/h
Consultar em memória?> 10K eventos/s × 3.600s/h× 100 bytes / evento       > 3GB/h
Hit Counting                n/10 bits-c log (z/c)   2% de erro
Hit Counting                n/10 bits-c log (z/c)   2% de erro36M eventos3.6Mbits450KB
Hit Countingadicionar!(item):  V[hash(item)] ← 1quantos?:  z ← número de zeros em V  c ← tamanho de V  retorne -c × log(z/c)
HyperLogLogContar até 1 bilhão  de elementos  usando 1.5KB
Hash       "To hash" é        "espalhar"
Hash  04 = 00000100  08 = 00001000  12 = 00001100  16 = 00010000
HashIt is theoretically impossible to define a   hash function that creates random data from non-random data in actual files...
HyperLogLog      Qual aprobabilidade dos n   primeiros bits   serem 0...01?
HyperLogLog1xxxxxxx -> 50%01xxxxxx -> 25%001xxxxx -> 12.5%0001xxxx -> 6.25%
HyperLogLog Dado que existe uma   palavra com os n     primeiros bits     0...01, qual acardinalidade provável?
HyperLogLog1xxxxxxx -> 201xxxxxx -> 4001xxxxx -> 80001xxxx -> 16
HyperLogLog Multiplas funções de        hash?
HyperLogLog  Dividir o stream em    "m" substreams
HyperLogLog          01100010           i=3 v=4  0   0   0   4   0   0   0   0  0   1   2   3   4   5   6   7
HyperLogLog 21   22   20   24   20   25   20   20  1   2    0    4    0    5    0    0  0   1    2    3    4    5    6    7
HyperLogLog  2   4   1   16   1   32   1   1  1   2   0   4    0   5    0   0  0   1   2   3    4   5    6   7
HyperLogLog          M(i)      2          , i<m
HyperLogLog               M(i) Ê = média(2          , i<m)
HyperLogLog                   M(i) Ê = m × média(2          , i<m)
HyperLogLog  Ê = αm × m × média(2M(i), i<m)      α m=
HyperLogLog  Ê = αm × m × média(2M(i), i<m)      α m=       αm= (0.7213 / (1 + 1.079 / m))
HyperLogLogadicionar!(item): x ← hash(item) i ← log2m primeiros bits de x  v ← pos. do primeiro 1 nos bits restantes de x ...
HyperLogLog        média aritmética:   (M(0) + M(1) + ... + M(m-1)) / m        média geométrica:    (M(0) × M(1) × ... × M...
HyperLogLog  Cada registro de M tem 5 bits.       Por isso "LogLog":                   32        log2(log2(2 )) = 5   Regi...
HyperLogLog      Para baixas cardinalidades, o erro   relativo aumenta.
HyperLogLogquantos?:  Ê ← αm × m × média(2M(i), i<m)  se Ê < 2.5 × m:    z ← número de zeros em M    retorne -m × log(z/m)...
HyperLogLog  1   2   2   4   0   5   0   0  0   1   2   3   4   5   6   7  5   0   1   0   5   2   3   1  0   1   2   3   ...
HyperLogLog  1   2   2   4   0   5   0   0  0   1   2   3   4   5   6   7  5   0   1   0   5   2   3   1  0   1   2   3   ...
ReferênciasSpace/Time Trade-offs in Hash Coding with Allowable Errors (Bloom Filters)http://citeseerx.ist.psu.edu/viewdoc/...
dnarj-20120630
dnarj-20120630
Upcoming SlideShare
Loading in …5
×

dnarj-20120630

960 views

Published on

Published in: Technology
  • Be the first to comment

dnarj-20120630

  1. 1. Estruturas de DadosProbabilísticas para lidar com DADO PRA CARAMBAJuan Lopes@juanplopes
  2. 2. Bloom Filters (1970)Hit Counting (1990)HyperLogLog (2007)
  3. 3. Detectar duplicaçõesindexar(documento): se documento não está indexado: lucene.indexar(documento)
  4. 4. Detectar duplicaçõesindexar(documento): se documento não está indexado: lucene.indexar(documento)
  5. 5. Consultar no disco?
  6. 6. Consultar no disco?
  7. 7. Consultar em memória? HashSet<T>
  8. 8. Consultar em memória? 100M ids
  9. 9. Consultar em memória? 100M ids × 32 chars / id
  10. 10. Consultar em memória? 100M ids × 104 bytes / id > 10GB
  11. 11. Consultar em memória? 100M ids × 104 bytes / id > 10GB
  12. 12. Bloom Filters I had a big data problem, "I know, Ill use a bloom filter."Now Im not sure how manyproblems I have, but I know which ones I dont.
  13. 13. Bloom Filters Adicione!(item) Contém?(item)
  14. 14. Bloom Filters Contém?(item) não 100% sim ~95%
  15. 15. Bloom Filters 0 x h(x) 0 1 0 0 0 0 0
  16. 16. Bloom Filters 1 x h(x) 0 1 h(y) 0 y 0 0 0 0
  17. 17. Bloom Filters 1 x h(x) 0 1 h(y) 0 y 0 0 h(z) z 0 0
  18. 18. Bloom Filtersadicionar!(item): V[hash(item)] ← 1contém?(item): retorne V[hash(item)] = 1
  19. 19. Bloom Filters 100M itens 2Gbits (256MB) 5% de erro
  20. 20. 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
  21. 21. Bloom Filtersadicionar!(item): para cada hash em hashes: V[hash(item)] ← 1contém?(item): para cada hash em hashes: se V[hash(item)] = 0: retorne falso retorne verdadeiro
  22. 22. Bloom Filters 100M itens 4 funções de hash 625Mbits (78MB) 5% de erro
  23. 23. Bloom Filters 100M itens 5 funções de hash 1Gbit (128MB) 1% de erro
  24. 24. Bloom Filters 100M itens 7 funções de hash 2Gbit (256MB) 0.01% de erro
  25. 25. Bloom Filters Probabilidade de falso positivo:
  26. 26. Cardinalidade Quantos ips distintos acessaram o site na última hora?
  27. 27. CardinalidadeQual a cardinalidade do stream S?
  28. 28. Consultar em memória? HashSet<T>
  29. 29. Usando HashSetadicionar!(item): S ← S ∪ { item }quantos?: retorne |S|
  30. 30. Consultar em memória? >10K eventos/s
  31. 31. Consultar em memória?> 10K eventos/s × 3.600s/h× 100 bytes / evento > 3GB/h
  32. 32. Consultar em memória?> 10K eventos/s × 3.600s/h× 100 bytes / evento > 3GB/h
  33. 33. Hit Counting n/10 bits-c log (z/c) 2% de erro
  34. 34. Hit Counting n/10 bits-c log (z/c) 2% de erro36M eventos3.6Mbits450KB
  35. 35. Hit Countingadicionar!(item): V[hash(item)] ← 1quantos?: z ← número de zeros em V c ← tamanho de V retorne -c × log(z/c)
  36. 36. HyperLogLogContar até 1 bilhão de elementos usando 1.5KB
  37. 37. Hash "To hash" é "espalhar"
  38. 38. Hash 04 = 00000100 08 = 00001000 12 = 00001100 16 = 00010000
  39. 39. HashIt 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
  40. 40. HyperLogLog Qual aprobabilidade dos n primeiros bits serem 0...01?
  41. 41. HyperLogLog1xxxxxxx -> 50%01xxxxxx -> 25%001xxxxx -> 12.5%0001xxxx -> 6.25%
  42. 42. HyperLogLog Dado que existe uma palavra com os n primeiros bits 0...01, qual acardinalidade provável?
  43. 43. HyperLogLog1xxxxxxx -> 201xxxxxx -> 4001xxxxx -> 80001xxxx -> 16
  44. 44. HyperLogLog Multiplas funções de hash?
  45. 45. HyperLogLog Dividir o stream em "m" substreams
  46. 46. HyperLogLog 01100010 i=3 v=4 0 0 0 4 0 0 0 0 0 1 2 3 4 5 6 7
  47. 47. HyperLogLog 21 22 20 24 20 25 20 20 1 2 0 4 0 5 0 0 0 1 2 3 4 5 6 7
  48. 48. HyperLogLog 2 4 1 16 1 32 1 1 1 2 0 4 0 5 0 0 0 1 2 3 4 5 6 7
  49. 49. HyperLogLog M(i) 2 , i<m
  50. 50. HyperLogLog M(i) Ê = média(2 , i<m)
  51. 51. HyperLogLog M(i) Ê = m × média(2 , i<m)
  52. 52. HyperLogLog Ê = αm × m × média(2M(i), i<m) α m=
  53. 53. HyperLogLog Ê = αm × m × média(2M(i), i<m) α m= αm= (0.7213 / (1 + 1.079 / m))
  54. 54. HyperLogLogadicionar!(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)
  55. 55. 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)
  56. 56. 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%
  57. 57. HyperLogLog Para baixas cardinalidades, o erro relativo aumenta.
  58. 58. HyperLogLogquantos?: Ê ← α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 Ê
  59. 59. HyperLogLog 1 2 2 4 0 5 0 0 0 1 2 3 4 5 6 7 5 0 1 0 5 2 3 1 0 1 2 3 4 5 6 7
  60. 60. HyperLogLog 1 2 2 4 0 5 0 0 0 1 2 3 4 5 6 7 5 0 1 0 5 2 3 1 0 1 2 3 4 5 6 7 5 2 2 4 5 5 3 1 0 1 2 3 4 5 6 7
  61. 61. ReferênciasSpace/Time Trade-offs in Hash Coding with Allowable Errors (Bloom Filters)http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.2080A Linear-Time Probabilistic Counting Algorithm for Database Applicationshttp://dblab.kaist.ac.kr/Publication/pdf/ACM90_TODS_v15n2.pdfHyperLogLog: the analysis of a near-optimal cardinality estimation algorithmhttp://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdfHashing Explained - Google Guavahttp://code.google.com/p/guava-libraries/wiki/HashingExplainedStreamLibhttps://github.com/clearspring/stream-lib

×