Introducao aos Bancos de Dados Não-relacionais

37
Introdução aos Bancos de Dados Não-Relacionais Mauricio De Diana (mestrando) Marco Aurélio Gerosa (orientador)

description

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.

Transcript of Introducao aos Bancos de Dados Não-relacionais

Page 1: Introducao aos Bancos de Dados Não-relacionais

Introdução aos Bancos de Dados Não-Relacionais

Mauricio De Diana (mestrando) Marco Aurélio Gerosa (orientador)

Page 2: Introducao aos Bancos de Dados Não-relacionais

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

Page 3: Introducao aos Bancos de Dados Não-relacionais

Modelo relacional

Base na lógica e na matemática

Relações

Domínios Operações (σ, π, ⋈)

Restrições

2/34

Page 4: Introducao aos Bancos de Dados Não-relacionais

Bancos não-relacionais

Bancos hierárquicos Bancos orientados a objetos

Bancos de XML

Etc

3/34

Page 5: Introducao aos Bancos de Dados Não-relacionais

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

Page 6: Introducao aos Bancos de Dados Não-relacionais

Web 2.0

Data is the Next Intel Inside Inteligência Coletiva

Grande volume de dados Escala global (Internet scale services)

5/34

Page 7: Introducao aos Bancos de Dados Não-relacionais

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

Page 8: Introducao aos Bancos de Dados Não-relacionais

Soluções para dados

Bigtable (Google)

Dynamo (Amazon)

PNUTS (Yahoo!)

Além de:GFS, Hadoop, HDFS, MapReduce, Chubby, etc

7/34

Page 9: Introducao aos Bancos de Dados Não-relacionais

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

Page 10: Introducao aos Bancos de Dados Não-relacionais

Escalando BDs relacionais

Master-slave

Fonte: http://www.teonator.net/2008/10/23/mysql-replication/9/34

Page 11: Introducao aos Bancos de Dados Não-relacionais

Escalando BDs relacionais

Particionamento funcional

Fonte: http://qconlondon.com/london-2008/file?path=/qcon-london-2008/slides/RandyShoup_eBaysArchitecturalPrinciples.pdf

10/34

Page 12: Introducao aos Bancos de Dados Não-relacionais

Escalando BDs relacionais

Sharding

Fonte: http://itsfrosty.wordpress.com/2009/03/20/database-sharding-basics/

11/34

Page 13: Introducao aos Bancos de Dados Não-relacionais

Escalando BDs relacionais

Sharding

Fonte: http://www.codefutures.com/database-sharding/12/34

Page 14: Introducao aos Bancos de Dados Não-relacionais

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

Page 15: Introducao aos Bancos de Dados Não-relacionais

NoSQL

Definição fraca: Bancos não-relacionais distribuídos muito usados na Web

"No SQL" x "Not only SQL"

14/34

Page 16: Introducao aos Bancos de Dados Não-relacionais

NoSQL

Escalabilidade horizontal

Sem esquema

Replicação simples

API simples Software livre / Código aberto

Consistência eventual

15/34

Page 17: Introducao aos Bancos de Dados Não-relacionais

ACID x BASE

ACIDAtômico

Consistente

Isolado

Durável

BASEBasicamente disponível (Basically available)

Soft-state

Eventualmente consistente

16/34

Page 18: Introducao aos Bancos de Dados Não-relacionais

Teorema CAP

Consistência

Disponibilidade (Availability)

Tolerância à partição (Partition Tolerance)

17/34

Page 19: Introducao aos Bancos de Dados Não-relacionais

Cenário 1

18/34

Page 20: Introducao aos Bancos de Dados Não-relacionais

Cenário 2

Fonte: http://www.julianbrowne.com/article/viewer/brewers-cap-theorem

19/34

Page 21: Introducao aos Bancos de Dados Não-relacionais

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

Page 22: Introducao aos Bancos de Dados Não-relacionais

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

Page 23: Introducao aos Bancos de Dados Não-relacionais

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

Page 24: Introducao aos Bancos de Dados Não-relacionais

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

Page 25: Introducao aos Bancos de Dados Não-relacionais

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

Page 26: Introducao aos Bancos de Dados Não-relacionais

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")}

25/34

Fonte: http://www.mongodb.org/display/DOCS/Tutorial

Page 27: Introducao aos Bancos de Dados Não-relacionais

Armazéns chave-valor

Tabelas de hash distribuídas

Exemplos: Dynamo, Redis, Voldemort

Acesso: get / put

26/34

Page 28: Introducao aos Bancos de Dados Não-relacionais

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

Page 29: Introducao aos Bancos de Dados Não-relacionais

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

Page 30: Introducao aos Bancos de Dados Não-relacionais

Acesso

Bigtable (exemplo)Linha, coluna (família de coluna, qualificador), timestamp

Fonte: Bigtable: A Distributed Storage System for Structured Data

29/34

Page 31: Introducao aos Bancos de Dados Não-relacionais

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

Page 32: Introducao aos Bancos de Dados Não-relacionais

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

Page 33: Introducao aos Bancos de Dados Não-relacionais

Tendências

Release 2.0 (fev/09) Claremont Report (jun/09)

ThoughtWorks Radar (abr/10)

32/34

Page 34: Introducao aos Bancos de Dados Não-relacionais

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

Page 35: Introducao aos Bancos de Dados Não-relacionais

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

Page 36: Introducao aos Bancos de Dados Não-relacionais

Dúvidas?

Page 37: Introducao aos Bancos de Dados Não-relacionais

Obrigado

[email protected]