Escolar Documentos
Profissional Documentos
Cultura Documentos
Intro Nosql
Intro Nosql
No-Relacionais
Mauricio De Diana (mestrando)
Marco Aurlio Gerosa (orientador)
Contedo
Histrico de BDs no-relacionais na Web
4 Categorias de bancos NoSQL
Exemplos de formatos e acesso a dados de cada categoria
1/34
Modelo relacional
Base na lgica e na matemtica
Relaes
Domnios
Operaes (, , )
Restries
2/34
Bancos no-relacionais
Bancos hierrquicos
Bancos orientados a objetos
Bancos de XML
Etc
3/34
Bancos no-relacionais
Bancos hierrquicos
Bancos orientados a objetos
Bancos de XML
Etc
Web 2.0
Data is the Next Intel Inside
Inteligncia Coletiva
Grande volume de dados
Escala global (Internet scale services)
5/34
Web 2.0
Alto grau de paralelizao
Hardware commodity e barato
Software livre, cdigo aberto
Dados semi-estruturados e crs
6/34
Alm de:
GFS, Hadoop, HDFS, MapReduce, Chubby, etc
7/34
Alm de:
GFS, Hadoop, HDFS, MapReduce, Chubby, etc
Fonte: http://www.teonator.net/2008/10/23/mysql-replication/
9/34
Fonte: http://qconlondon.com/london-2008/file?path=/qcon-london2008/slides/RandyShoup_eBaysArchitecturalPrinciples.pdf
10/34
Fonte: http://itsfrosty.wordpress.com/2009/03/20/database-sharding-basics/
11/34
Fonte: http://www.codefutures.com/database-sharding/
12/34
Sharding - Problemas
Queries distribudas
Cross-shard joins
Auto-increment
Integridade referencial
Lgica de sharding na camada de aplicao
(Opo: MySQL Proxy)
13/34
NoSQL
Definio fraca:
Bancos no-relacionais distribudos muito usados na Web
"No SQL" x "Not only SQL"
14/34
NoSQL
Escalabilidade horizontal
Sem esquema
Replicao simples
API simples
Software livre / Cdigo aberto
Consistncia eventual
15/34
ACID x BASE
ACID
Atmico
BASE
Basicamente disponvel
(Basically available)
Consistente
Soft-state
Isolado
Eventualmente consistente
Durvel
16/34
Teorema CAP
Consistncia
Disponibilidade (Availability)
Tolerncia partio (Partition Tolerance)
17/34
Cenrio 1
18/34
Cenrio 2
Fonte: http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
19/34
20/34
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")}
Fonte: http://www.mongodb.org/display/DOCS/Tutorial
25/34
Armazns chave-valor
Tabelas de hash distribudas
Exemplos: Dynamo, Redis, Voldemort
Acesso: get / put
26/34
27/34
Formato
EmpId, Sobrenome, Nome, Salrio
Orientado a linha:
1,Silva,Joo,600;2,Dias,Maria,500;3,Matos,Jos,440;
Orientado a coluna:
1,2,3;Silva,Dias,Matos;Joo,Maria,Jos;600,500,440;
28/34
Acesso
Bigtable (exemplo)
Linha, coluna (famlia de coluna, qualificador), timestamp
BDs de grafos
Armazenam vrtices e arestas (e suas propriedades)
Representam interconectividade entre os dados
Operaes 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
Tendncias
Release 2.0 (fev/09)
Claremont Report (jun/09)
ThoughtWorks Radar (abr/10)
32/34
Concluses
Dois focos:
Performance / Escalabilidade
Simplicidade
Ferramenta mais adequada para o problema
Futuro incerto (mas a volta ao modelo relacional improvvel)
33/34
Referncias
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
Dvidas?
Obrigado
mdediana@ime.usp.br