Bancos de dados No-SQL e afins

4,731 views

Published on

Apresentação para a Bluesoft sobre projetos de bancos de dados No-SQL

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

No Downloads
Views
Total views
4,731
On SlideShare
0
From Embeds
0
Number of Embeds
1,387
Actions
Shares
0
Downloads
0
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • Eric Evans – Rackspace - DDD Johan Oskarsson – Last.fm – evento sobre bases open-source distribuídas Not Only Sql
  • Facebook – 40G Files, 10G Fotos, 1PiB, 5K page views /s, 36K qps, 1 DBA Ebay – 2PiB data Twitter – (Cassandra?) - 50 Mi Tweets/dia
  • - Comodity Hardware: EMT64, 16GB Ram, 6x15k RAID10 -> Para conseguir esses benefícios é necessário aplicacar as técnicas
  • - Dados são denormalizados - Particionamento do pai e dos filhos - Core tables são replicados - Pode ser combinado com particionamento vertical -> Para conseguir buscar os dados é necessário MapReduce
  • TODO Explicacao
  • Key/Value – HashTable
  • 90% - Bilhoes de linhas
  • Key/Value Store Biblioteca stand-alone Versões mais novas possuem HA
  • Key Value Store Biblioteca stand-alone Servidor Tokyo Tyrant
  • Outros Redis Githut Data Partition 80-110k op/s Scalaris
  • Entity sem um pai é o root do EntityGroup Todo EntityGroup é operado em uma única operação
  • Vantagem: Interface REST pública
  • Yahoo
  • Melhor performance Sem transação
  • Twitter – mudou recentemente Facebook – Inbox - 600+ cores / 120+ TB disk space
  • Consultas mais fáceis Dados mais flexiveis Menos escalabilidade
  • Alta concorrencia
  • Futura HA SourceForge / GitHub
  • Entidades se relacionam Relacionamento podem ter atributos Traversal framework
  • Neo4j – java, scallable, embedded InfoGrid – restful, external data(ex. Rss, atom)
  • 100x performance on ad-hoc
  • TODO
  • Bancos de dados No-SQL e afins

    1. 1. Persistência NOSQL e tecnologias afins Daniel Carneiro
    2. 2. O que é NOSQL <ul><li>Termo criado por Eric Evans em 2009
    3. 3. Modelo de persistência que não utiliza SQL
    4. 4. Surgiu da necessidade de implementar soluções em que bancos de dados relacionais não se encaixam perfeitamente. </li></ul>
    5. 5. Porquê <ul><li>Escalabilidade </li><ul><li>Somente MainFrame obtém 99,999% de confiabilidade
    6. 6. 2 Tipos: </li><ul><li>Vertical – Máquina maior (SPOF)
    7. 7. Horizontal – Mais máquinas </li></ul></ul><li>Performance </li><ul><li>Algumas implementações prometem 100x de performance em relaçao aos RDBMS </li></ul></ul>
    8. 8. Benefícios <ul><li>Escalabilidade horizontal
    9. 9. Distribuído
    10. 10. Performance
    11. 11. Suporte a grandes bases de dados
    12. 12. Schema-free
    13. 13. ”One size doesn't fit all” </li></ul>
    14. 14. Sharding <ul><li>Shared-Nothing Partition
    15. 15. Objetivo principal: Quebrar sua tabelas, agrupando-as por dados semenhantes
    16. 16. Várias formas: </li><ul><li>Vertical
    17. 17. Horizontal </li><ul><li>by Range
    18. 18. by Key / Hash </li></ul></ul></ul>
    19. 19. MapReduce <ul><li>Algoritmo patenteado pelo Google para processamento em larga escala
    20. 20. Map step: o nó pricipal quebra a tarefa em partes e distribui para os outros nós processarem
    21. 21. Reduce step: o nó pai combina as respostas recebidas pelos outros, criando a resposta final do problema a ser resolvido </li></ul>
    22. 22. MapReduce (cont.) Exemplo - Contar o numero de vezes que cada palavra aparece em um conjunto de documentos: void map(String name, String document): // name: document name // document: document contents for each word w in document: EmitIntermediate(w, &quot;1&quot;); void reduce(String word, Iterator partialCounts): // word: a word // partialCounts: a list of aggregated partial counts int result = 0; for each pc in partialCounts: result += ParseInt(pc); Emit(AsString(result));
    23. 23. Tipos <ul><li>Key/Value Store
    24. 24. Wide Column Store
    25. 25. Document Store
    26. 26. Graph Store
    27. 27. Column Oriented Store </li></ul>
    28. 28. Tipos (cont.) Size Complexity Key-Value Wide-Column Document Graph 90% of use cases
    29. 29. Key / Value Store <ul><li>Like HashTable
    30. 30. No index
    31. 31. No search </li></ul>
    32. 32. Berkeley DB <ul><li>Criado em (1986) na universidade de Berkeley
    33. 33. Sucessor do DBM (1979)
    34. 34. Berkeley -> Sleepycat -> Oracle
    35. 35. Dual License </li></ul>
    36. 36. Tokyo Cabinet <ul><li>Criado em 2006 por Mikio Hirabayashi
    37. 37. Sucessor do GDBM
    38. 38. Melhor performance / threading / Armazenamento
    39. 39. LGPL </li></ul>
    40. 40. Project Voldermort <ul><li>LinkedIn
    41. 41. Replication Multimaster
    42. 42. Auto Partition
    43. 43. 10-20K op/s </li></ul>
    44. 44. MemcacheDB <ul><li>Baseado no memcached
    45. 45. Usa BerlekeyDB para persistência
    46. 46. 20-60k op/s </li></ul>
    47. 47. Wide Column <ul><li>Colunas podem ser consultadas / indexadas
    48. 48. Colunas possuem multiplos valores
    49. 49. Eventually Consistent </li></ul>
    50. 50. Google Big Table <ul><li>Serviço pago
    51. 51. Permite colunas com listas de valores
    52. 52. Colunas podem ser adicionadas dinamicamente
    53. 53. Colunas são indexadas automaticamente
    54. 54. Estrutura em árvore (EntityGroup)
    55. 55. Transação provida através de EntityGroup </li></ul>
    56. 56. SimpleDB (Amazon) <ul><li>Interface REST
    57. 57. Serviço pago
    58. 58. Domains (Tables, max 100)
    59. 59. Colunas com listas de valores </li></ul>
    60. 60. HBase <ul><li>Serviço de base de dados criado sobre a plataforma Hadoop
    61. 61. Thrift API
    62. 62. Table / Family:Column / Time </li></ul>
    63. 63. Hipertable <ul><li>C++ / HDFS
    64. 64. Key / Column Family / Qualifier / Time
    65. 65. Thrift API </li></ul>
    66. 66. Cassandra <ul><li>Facebook / Twitter
    67. 67. Decentralized / Full Tolerant / Eventual Consistency
    68. 68. Java
    69. 69. Keyspace / Column Families (Table / Fixed) / SuperColumns / Columns
    70. 70. Thrift API </li></ul>
    71. 71. Document Store <ul><li>Armazenam documentos semi-estruturados
    72. 72. Sem relacionamentos entre documentos
    73. 73. Transação em nível de documento
    74. 74. Modelo de replicação: ”Eventualmente Consistente” </li></ul>
    75. 75. CouchDB (Apache) <ul><li>Escrito em Erlang
    76. 76. Interface RESTful / JSON
    77. 77. Map-Reduce </li></ul>
    78. 78. MongoDB <ul><li>Escrito em C/C++
    79. 79. Interface BSON / JSON
    80. 80. Dynamic Queries / Map-Reduce </li></ul>
    81. 81. Graph Store <ul><li>Aramazena os dados em grafos
    82. 82. Busca por transposição </li></ul>
    83. 83. Graph Store A B C E D
    84. 84. Graph Store (cont.) <ul><li>Neo4j
    85. 85. InfoGrid
    86. 86. VertexDB </li></ul>
    87. 87. Column Oriented Store (SQL) <ul><li>Baseado em SQL
    88. 88. Dados são agrupados por colunas e não em linhas
    89. 89. Boa performance em DW </li></ul>
    90. 90. Column Oriented Store (cont.) <ul><li>Vertica / C-Store
    91. 91. MonetDB
    92. 92. LucidDB
    93. 93. Infobright
    94. 94. Ingres/Vectorwise </li></ul>
    95. 95. Conclusões <ul><li>Novas formas de modelar os dados
    96. 96. Escalabilidade possui um preço
    97. 97. Não há um concenso ou padronizacao entre os projetos
    98. 98. Cada projeto foi concebido para resolver problemas particulares </li></ul>
    99. 99. Dúvidas Dúvidas ? Questões ? Angústias ?
    100. 100. Referências <ul><li>Internet !!!!!
    101. 101. www.wikipedia.org
    102. 102. nosql-database.org
    103. 103. http://www.slideshare.net/jperras/nonrelational-databases-keyvalue-stores
    104. 104. http://www.codefutures.com/database-sharding
    105. 105. http://www.slideshare.net/emileifrem/nosql-east-a-nosql-overview-and-the-benefits-of-graph-databases </li></ul>

    ×