Introducao aos Bancos de Dados Não-relacionais

10,402 views
10,178 views

Published on

Seminário apresentado no IME-USP, 07/06/2010

----------------------------------------------------------------------
Com a Web 2.0, o volume de dados gerados e armazenados cresce exponencialmente a cada ano. A medida em que aplicações precisam lidar com esse grande volume, seus requisitos são revistos - por exemplo, às vezes pode ser necessário abrir mão da consistência dos dados para se atingir uma maior escalabilidade da aplicação.
Esse novo cenário propiciou o surgimento de novas tecnologias e o ressurgimento de outras. Os sistemas de gerenciamento de bancos de dados não-relacionais (também chamados informalmente de NoSQL), como os bancos orientados a documentos, bancos chave-valor e bancos de grafos, são uma dessas tecnologias. Inicialmente, essa movimentação começou em algumas das grandes empresas da Web 2.0, como Google e Amazon, mas rapidamente opções de software livre começaram a aparecer e se estabelecer.

Esse seminário tratará dos princípios por trás do uso de sistemas de gerenciamento de banco de dados não-relacionais, suas vantagens e desvantagens e seus principais tipos e aplicações.

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

No Downloads
Views
Total views
10,402
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
218
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Introducao aos Bancos de Dados Não-relacionais

  1. 1. Introdução aos Bancos de Dados Não-Relacionais Mauricio De Diana (mestrando) Marco Aurélio Gerosa (orientador)
  2. 2. Conteúdo Histórico de BDs não-relacionais na Web 4 Categorias de bancos NoSQL Exemplos de formatos e acesso a dados de cada categoria 1/34
  3. 3. Modelo relacional Base na lógica e na matemática Relações Domínios Operações (σ, π, ⋈) Restrições 2/34
  4. 4. Bancos não-relacionais Bancos hierárquicos Bancos orientados a objetos Bancos de XML Etc 3/34
  5. 5. Bancos não-relacionais Bancos hierárquicos Bancos orientados a objetos Bancos de XML Etc Ou seja, não-relacional não define muito 4/34
  6. 6. Web 2.0 Data is the Next Intel Inside Inteligência Coletiva Grande volume de dados Escala global (Internet scale services) 5/34
  7. 7. Web 2.0 Alto grau de paralelização Hardware commodity e barato Software livre, código aberto Dados semi-estruturados e crús 6/34
  8. 8. Soluções para dados Bigtable (Google) Dynamo (Amazon) PNUTS (Yahoo!) Além de: GFS, Hadoop, HDFS, MapReduce, Chubby, etc 7/34
  9. 9. Soluções para dados Bigtable (Google) Dynamo (Amazon) PNUTS (Yahoo!) Além de: GFS, Hadoop, HDFS, MapReduce, Chubby, etc Enquanto isso, nas startups... 8/34
  10. 10. Escalando BDs relacionais Master-slave Fonte: http://www.teonator.net/2008/10/23/mysql-replication/ 9/34
  11. 11. Escalando BDs relacionais Particionamento funcional Fonte: http://qconlondon.com/london-2008/file?path=/qcon-london- 2008/slides/RandyShoup_eBaysArchitecturalPrinciples.pdf 10/34
  12. 12. Escalando BDs relacionais Sharding Fonte: http://itsfrosty.wordpress.com/2009/03/20/database-sharding-basics/ 11/34
  13. 13. Escalando BDs relacionais Sharding Fonte: http://www.codefutures.com/database-sharding/ 12/34
  14. 14. Sharding - Problemas Queries distribuídas Cross-shard joins Auto-increment Integridade referencial Lógica de sharding na camada de aplicação (Opção: MySQL Proxy) 13/34
  15. 15. NoSQL Definição fraca: Bancos não-relacionais distribuídos muito usados na Web "No SQL" x "Not only SQL" 14/34
  16. 16. NoSQL Escalabilidade horizontal Sem esquema Replicação simples API simples Software livre / Código aberto Consistência eventual 15/34
  17. 17. ACID x BASE ACID BASE Atômico Basicamente disponível (Basically available) Consistente Soft-state Isolado Eventualmente consistente Durável 16/34
  18. 18. Teorema CAP Consistência Disponibilidade (Availability) Tolerância à partição (Partition Tolerance) 17/34
  19. 19. Cenário 1 18/34
  20. 20. Cenário 2 Fonte: http://www.julianbrowne.com/article/viewer/brewers-cap-theorem 19/34
  21. 21. NoSQL - Principais categorias Bancos de dados orientados a documentos (Document-oriented databases) Armazéns chave-valor (Key-value stores) Bancos de dados orientados a colunas (Column-oriented databases) Bancos de dados de grafos (Graph databases) 20/34
  22. 22. BDs orientados a documentos Armazenam coleções de pares de chave-valor Esquema flexível Formatos: JSON, XML, propriedades, etc Sharding simples: documentos sem referências explícitas Exemplos: MongoDB, CouchDB, Riak 21/34
  23. 23. Documento (JSON) { autor: 'joao', criado : new Date('03-28-2009'), titulo : 'Primeiro post', texto : 'Aqui está o texto...', tags : [ 'exemplo', 'joao' ], comentarios : [ { autor: 'edu', comentario: 'Ruim' }, { autor: 'maria', comentario: 'Legal' }] } 22/34
  24. 24. Documento (JSON) { autor: 'joao', criado : new Date('03-28-2009'), titulo : 'Primeiro post', texto : 'Aqui está o texto...', modificado: new Date('05-06-2009'), modificado por: 'jose', tags : [ 'exemplo', 'joao' 'jose' ], , comentarios : [ { autor: 'edu', comentario: 'Ruim' }, { autor: 'maria', comentario: 'Legal' }] } 23/34
  25. 25. Acesso MongoDB (exemplo) > j = { name : "mongo" }; {"name" : "mongo"} > t = { x : 3 }; { "x" : 3 } > db.things.save(j); > db.things.save(t); > db.things.find(); {"name" : "mongo" , "_id" : ObjectId("497cf60751712cf7758fbdbb")} {"x" : 3 , "_id" : ObjectId("497cf61651712cf7758fbdbc")} 24/34
  26. 26. Acesso MongoDB (exemplo) > db.things.find({name:"mongo"}).forEach( function(x) { print(tojson(x));}); {"name" : "mongo" , "_id" : ObjectId("497cf60751712cf7758fbdbb")} > db.things.find({x:3}).forEach( function(x) { print(tojson(x));}); {"x" : 3 , "_id" : ObjectId("497cf61651712cf7758fbdbc")} Fonte: http://www.mongodb.org/display/DOCS/Tutorial 25/34
  27. 27. Armazéns chave-valor Tabelas de hash distribuídas Exemplos: Dynamo, Redis, Voldemort Acesso: get / put 26/34
  28. 28. BDs orientados a colunas Armazenam dados por colunas, não linhas Mais eficiência manipulando todos os registros (OLAP) Linhas não têm a mesma quantidades de colunas Esquema flexível Exemplos: Bigtable, Cassandra, HBase 27/34
  29. 29. Formato EmpId, Sobrenome, Nome, Salário Orientado a linha: 1,Silva,João,600;2,Dias,Maria,500;3,Matos,José,440; Orientado a coluna: 1,2,3;Silva,Dias,Matos;João,Maria,José;600,500,440; 28/34
  30. 30. Acesso Bigtable (exemplo) Linha, coluna (família de coluna, qualificador), timestamp Fonte: Bigtable: A Distributed Storage System for Structured Data 29/34
  31. 31. BDs de grafos Armazenam vértices e arestas (e suas propriedades) Representam interconectividade entre os dados Operações sobre grafos: percorrer caminho Exemplos: Infogrid, Neo4J 30/34
  32. 32. Acesso Infogrid (exemplo) customer.traverseToNeighbors().getSingleMember(); order.traverseToNeighbors().getSingleMember(); customer.unrelate(order); Fonte: http://infogrid.org/blog/2010/02/operations-on-a-graph-database-part-2/ 31/34
  33. 33. Tendências Release 2.0 (fev/09) Claremont Report (jun/09) ThoughtWorks Radar (abr/10) 32/34
  34. 34. Conclusões Dois focos: Performance / Escalabilidade Simplicidade Ferramenta mais adequada para o problema Futuro incerto (mas a volta ao modelo relacional é improvável) 33/34
  35. 35. Referências http://nosql-database.org/ http://nosql.mypopescu.com/ Varley, Ian Thomas. No Relation: The Mixed Blessings of Non-Relational Databases (2009). Orend, Kei. Analysis and Classification of NoSQL Databases and Evaluation of their Ability to Replace an Object-relational Persistence (2010). 34/34
  36. 36. Dúvidas?
  37. 37. Obrigado mdediana@ime.usp.br

×