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.

dnarj-20120630

  • 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

×