Bancos de dados No-SQL e afins

4.746 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

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>

×