Introducao aos Bancos de Dados Não-relacionais

Post on 25-May-2015

9.420 views 1 download

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

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

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

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

Modelo relacional

Base na lógica e na matemática

Relações

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

Restrições

2/34

Bancos não-relacionais

Bancos hierárquicos Bancos orientados a objetos

Bancos de XML

Etc

3/34

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

Web 2.0

Data is the Next Intel Inside Inteligência Coletiva

Grande volume de dados Escala global (Internet scale services)

5/34

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

Soluções para dados

Bigtable (Google)

Dynamo (Amazon)

PNUTS (Yahoo!)

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

7/34

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

Escalando BDs relacionais

Master-slave

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

Escalando BDs relacionais

Particionamento funcional

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

10/34

Escalando BDs relacionais

Sharding

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

11/34

Escalando BDs relacionais

Sharding

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

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

NoSQL

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

"No SQL" x "Not only SQL"

14/34

NoSQL

Escalabilidade horizontal

Sem esquema

Replicação simples

API simples Software livre / Código aberto

Consistência eventual

15/34

ACID x BASE

ACIDAtômico

Consistente

Isolado

Durável

BASEBasicamente disponível (Basically available)

Soft-state

Eventualmente consistente

16/34

Teorema CAP

Consistência

Disponibilidade (Availability)

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

17/34

Cenário 1

18/34

Cenário 2

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

19/34

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

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

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

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

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

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

Armazéns chave-valor

Tabelas de hash distribuídas

Exemplos: Dynamo, Redis, Voldemort

Acesso: get / put

26/34

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

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

Acesso

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

Fonte: Bigtable: A Distributed Storage System for Structured Data

29/34

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

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

Tendências

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

ThoughtWorks Radar (abr/10)

32/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

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

Dúvidas?

Obrigado

mdediana@ime.usp.br