Your SlideShare is downloading. ×
0
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
dnarj-20120630
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

dnarj-20120630

728

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
728
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Estruturas de DadosProbabilísticas para lidar com DADO PRA CARAMBAJuan Lopes@juanplopes
  • 2. Bloom Filters (1970)Hit Counting (1990)HyperLogLog (2007)
  • 3. Detectar duplicaçõesindexar(documento): se documento não está indexado: lucene.indexar(documento)
  • 4. Detectar duplicaçõesindexar(documento): se documento não está indexado: lucene.indexar(documento)
  • 5. Consultar no disco?
  • 6. Consultar no disco?
  • 7. Consultar em memória? HashSet<T>
  • 8. Consultar em memória? 100M ids
  • 9. Consultar em memória? 100M ids × 32 chars / id
  • 10. Consultar em memória? 100M ids × 104 bytes / id > 10GB
  • 11. Consultar em memória? 100M ids × 104 bytes / id > 10GB
  • 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. Bloom Filters Adicione!(item) Contém?(item)
  • 14. Bloom Filters Contém?(item) não 100% sim ~95%
  • 15. Bloom Filters 0 x h(x) 0 1 0 0 0 0 0
  • 16. Bloom Filters 1 x h(x) 0 1 h(y) 0 y 0 0 0 0
  • 17. Bloom Filters 1 x h(x) 0 1 h(y) 0 y 0 0 h(z) z 0 0
  • 18. Bloom Filtersadicionar!(item): V[hash(item)] ← 1contém?(item): retorne V[hash(item)] = 1
  • 19. Bloom Filters 100M itens 2Gbits (256MB) 5% de erro
  • 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. 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. Bloom Filters 100M itens 4 funções de hash 625Mbits (78MB) 5% de erro
  • 23. Bloom Filters 100M itens 5 funções de hash 1Gbit (128MB) 1% de erro
  • 24. Bloom Filters 100M itens 7 funções de hash 2Gbit (256MB) 0.01% de erro
  • 25. Bloom Filters Probabilidade de falso positivo:
  • 26. Cardinalidade Quantos ips distintos acessaram o site na última hora?
  • 27. CardinalidadeQual a cardinalidade do stream S?
  • 28. Consultar em memória? HashSet<T>
  • 29. Usando HashSetadicionar!(item): S ← S ∪ { item }quantos?: retorne |S|
  • 30. Consultar em memória? >10K eventos/s
  • 31. Consultar em memória?> 10K eventos/s × 3.600s/h× 100 bytes / evento > 3GB/h
  • 32. Consultar em memória?> 10K eventos/s × 3.600s/h× 100 bytes / evento > 3GB/h
  • 33. Hit Counting n/10 bits-c log (z/c) 2% de erro
  • 34. Hit Counting n/10 bits-c log (z/c) 2% de erro36M eventos3.6Mbits450KB
  • 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. HyperLogLogContar até 1 bilhão de elementos usando 1.5KB
  • 37. Hash "To hash" é "espalhar"
  • 38. Hash 04 = 00000100 08 = 00001000 12 = 00001100 16 = 00010000
  • 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. HyperLogLog Qual aprobabilidade dos n primeiros bits serem 0...01?
  • 41. HyperLogLog1xxxxxxx -> 50%01xxxxxx -> 25%001xxxxx -> 12.5%0001xxxx -> 6.25%
  • 42. HyperLogLog Dado que existe uma palavra com os n primeiros bits 0...01, qual acardinalidade provável?
  • 43. HyperLogLog1xxxxxxx -> 201xxxxxx -> 4001xxxxx -> 80001xxxx -> 16
  • 44. HyperLogLog Multiplas funções de hash?
  • 45. HyperLogLog Dividir o stream em "m" substreams
  • 46. HyperLogLog 01100010 i=3 v=4 0 0 0 4 0 0 0 0 0 1 2 3 4 5 6 7
  • 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. 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. HyperLogLog M(i) 2 , i<m
  • 50. HyperLogLog M(i) Ê = média(2 , i<m)
  • 51. HyperLogLog M(i) Ê = m × média(2 , i<m)
  • 52. HyperLogLog Ê = αm × m × média(2M(i), i<m) α m=
  • 53. HyperLogLog Ê = αm × m × média(2M(i), i<m) α m= αm= (0.7213 / (1 + 1.079 / m))
  • 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. 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. 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. HyperLogLog Para baixas cardinalidades, o erro relativo aumenta.
  • 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. 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. 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. 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

×