NoSQL - Por que e quando usar?

8.490 visualizações

Publicada em

Publicada em: Tecnologia

NoSQL - Por que e quando usar?

  1. 1. Por que e quando usar? Nico Steppat [email_address] @steppat
  2. 2. - Desenvolvedor - Instrutor - Blogger - Engenheiro - Carioca (quase) - Apaixonado pelo NoSQL Quem sou eu?
  3. 4. vs
  4. 5. Eierlegendewollmilchsau vs
  5. 6. Web scale
  6. 7. (Dr. Brewer) consistência disponibilidade
  7. 8. Web scale disponibilidade consistência
  8. 9. Tolerancia à partição na rede Teorema CAP Web scale consistência disponibilidade
  9. 10. facebook ?
  10. 11. facebook SQL – Modelo relacional – ACID – APIs Maduro – Robusto – Conhecido - Barato SQL – Rocks!
  11. 12. MAS? facebook “ Quando tudo o que você tem é um martelo, todos os problemas parecem pregos” (sabedoria popular)
  12. 13. facebook “ Quando tudo o que você tem é um martelo, todos os problemas parecem pregos” (sabedoria popular)
  13. 14. NoSQL == facebook Persistência-poliglota
  14. 15. facebook
  15. 16. SQL: like '%restaurante%' like '%restaurante%' or '%festa%'
  16. 17. facebook
  17. 18. facebook -> Buscas aproximadas -> Rankear (ranking) -> Buscas dinâmicas
  18. 19. facebook Document-Store #1 (Fulltext-search engine)
  19. 20. Onde gravar os logs da aplicação?
  20. 21. db.createCollection("userlog", {capped: true, size:100000}) { "event":"userlog", "userid":"12573", "priority" : "WARN", "data": "07 Nov 2011", "time": "15:17:50,343", "class":"VendaController", "method":"removerVenda", "message":"permissão negada" } Document-Store #2 Capped Collections
  21. 22. Como modelar uma hierarquia no banco?
  22. 23. Artigo - NoSQL Comentário Comentário Comentário Comentário Comentário Como modelar uma hieraquia no banco?
  23. 24. No Banco Relacional? tbl comentarios --------------- id parent_id autor mensagem 1 0 João "Não entendi o teorema CAP." 2 1 Maria "Dá uma olhada ….." 3 2 João "Vlw. Pela dica." 4 0 Pedro "Bem interessante!"
  24. 25. { id: "4c6b9456f61f000000007ba6" comments: [ {author: "João", message: "Não entendi o teorema CAP.", replies: [ {author: "Maria", message: "Dá uma olhada no blog da Caelum.", replies: [ {author: "João", message: "Vlw pela dica!", replies: [] }] }] }] Document-Store #3
  25. 26. Dados quentes Dados frios
  26. 27. Alterações no esquema? Dados quentes Dados frios
  27. 28. Alterações no esquema não devem atrapalhar! Dados quentes
  28. 29. { "id": "324", " venda ": { "data": "07 Nov 2010", "valor": "2700,00" }, " cliente " : { "cnpj":"123-345-5678/0004", ...} " produto " : { "Notebook":"Toshiba ", "Model":"Satelite AAC-345", ...} } { "id": "567", " venda " : { "data" : "08 Abr 2011", "valor" : "3400,00" }, " cliente " : { "cnpj" : "123-345-5678/0004", ...} " pedido " : { "quantidade" : "2", " produto " : { "Notebook":"Sony ", "Model":"Vaio LAB-45", … } } Alterações no esquema não devem atrapalhar! Document-Store #4 Documento Venda Documento Venda com pedido
  29. 30. Onde gravar o histórico dos dados quentes ? tbl pedidos ----------- id cliente_id produto_id qtd data 243 432 154 03 22/10/2011 tbl pedidos ----------- id cliente_id produto_id qtd data 243 432 154 10 09/11/2011 Alteração do registro
  30. 31. Tbl pedidos ----------- id cliente_id produto_id qtd data 243 432 154 10 09/11/2011 { id : "243", changes : { 1300700615678 : { "cliente_id" : "432", "produto_id" : "154" "qtd" : "3", "data" : "22/10/2011" } 1320760617815 : { "qtd" : "10", "data" : "09/11/2011" }, } } Document-Store #5
  31. 32. Relaxarrrrrr
  32. 33. Como relaxarrrrrr?
  33. 34. Trabalho offline Master Master
  34. 35. Sincronização Conflict management CouchDB – offline por padrão
  35. 36. Lembrando: -> Escalabilidade extrema -> Document-stores -> p/ dados semi-estruturados -> alterações no esquema -> offline work Ex. Buscas, Logs, Arquivar, Histórico, Relaxarrr
  36. 37. Arquivar dados frios e analisar Dados quentes
  37. 38. Como analisar os dados frios ? tbl pedidos ----------- id cliente produto qtd data 1 João Sony Vaio 4 03/10/2011 2 Maria Toshiba Sat. 3 08/11/2011 3 Pedro Macbook Pro 5 10/11/2011 colunas pedidos --------------- Ids: 1;2;3 Clientes: João;Maria;Pedro Produtos: Sony Vaio;Toshiba Sat.;Macbook Pro Qtd: 4;3;5 Data: 03/10/2011;08/11/2011;10/11/2011
  38. 39. Row-based vs Column-based OLTP vs OLAP
  39. 40. Arquivar para analisar Column-stores
  40. 41. Exemplos Column-stores <ul><li>Bigtable
  41. 42. Cassandra </li></ul><ul><li>HBase </li></ul><ul><li>Sistemas Data warehouse
  42. 43. e vários outros ... </li></ul>Queries: Map/Reduce, Hive e Pig
  43. 44. Como modelar um grafo?
  44. 45. Como modelar um grafo? Será que o MODELO RELACIONAL é bom pra isso?
  45. 46. Como modelar um grafo? http://www.slideshare.net/emileifrem/neo4j-presentation-at-qcon-sf-2008-presentation NeoService banco = ... Node mrAnderson = banco.createNode(); mrAnderson.setProperty(&quot;name&quot;, &quot;Anderson&quot;); Node morpheus = banco .createNode(); mrAnderson.setProperty(&quot;name&quot;, &quot;Morpheus&quot;); mrAnderson. createRelationshipTo (morpheus, RelTypes.AMIGAO); AMIGÃO
  46. 47. Bancos de grafos <ul><li>Neo4j
  47. 48. HypergraphDB </li></ul><ul><li>InfoGrid </li></ul><ul><li>InfiniteGraph
  48. 49. e vários outros ... </li></ul>
  49. 50. Lembrando: -> Column stores -> para dados estruturados -> para análise -> Graph databases -> relacionamentos complexas
  50. 51. Arquitetura Web-App
  51. 53. ID: A628B665D8989C03 Key - Value
  52. 54. Key-Value NO BANCO RELACIONAL?
  53. 55. ID: A628B665D8989C03 Key - Value Store! Key-Value-Store #1
  54. 56. Key-Value-Store #1
  55. 57. http://www.caelum.com.br/apostilas/ Onde ficam as apostilas abertas? Onde ficam as apostilas PERSISTIDAS?
  56. 58. Key-Value-Store #2 s3ObjectStore.store(&quot;FJ-11.pdf&quot;, new File(&quot;fj-11.pdf&quot;), &quot;apostilas&quot;);
  57. 59. Como fazer integração entre aplicações?
  58. 60. Integracão entre aplicações COM BANCO RELACIONAL?
  59. 61. Key-Value-Store #3 Serviço de mensagens com NoSQL HTTP POST Http://localhost/q/pedidos HTTP GET Http://localhost/q/pedidos
  60. 62. Resumo: -> Escalabilidade -> distribuição de dados -> replicação -> modelo de consistência -> gerenciamento de conflitos
  61. 63. Resumo: -> Ferramenta específica -> cache / backup / histórico -> busca textual -> arquivar e analisar -> offline -> integração
  62. 64. Resumo: -> Modelo de dados Estrutura Chave-Valor Documentos Colunas Grafo Complexidade Queries
  63. 66. Key-Value-Store #3 Integração entre aplicações
  64. 67. NoSQL - Tradeoff <ul><li>SQL Key, Rango, Indices, Views, Lucene
  65. 68. Esquema relacional Schema-free, semi-structured
  66. 69. Integridade referencial, Joins Aplicação faz
  67. 70. ACID TX Local, Revision, Consensus </li></ul>SQL

×