noSQL wtf?! sexta-feira, 12 de novembro de 2010
noSQL wtf?!
sexta-feira, 12 de novembro de 2010
contexto
sexta-feira, 12 de novembro de 2010
serviços websexta-feira, 12 de novembro de 2010
falta de capitalsexta-feira, 12 de novembro de 2010
mesmo assim...
sexta-feira, 12 de novembro de 2010
“risco” de fazer sucesso
sexta-feira, 12 de novembro de 2010
big data
sexta-feira, 12 de novembro de 2010
história...
sexta-feira, 12 de novembro de 2010
• Hierarchical (IMS): late 1960’s and 1970’s • Directed graph (CODASYL): 1970’s • Relational: 1970’s and early 1980’s • Entity-Relationship: 1970’s • Extended Relational: 1980’s • Semantic: late 1970’s and 1980’s• Object-oriented: late 1980’s and early 1990’s • Object-relational: late 1980’s and early 1990’s • Semi-structured (XML): late 1990’s to late 2000’s• The next big thing: ???
ref: What Goes Around Comes Around por Michael Stonebraker e Joey Hellerstein
modelos
sexta-feira, 12 de novembro de 2010
next big thing?
sexta-feira, 12 de novembro de 2010
abaixo o banco de
dados relacional!
sexta-feira, 12 de novembro de 2010
abaixo ao banco de dados relacional!
como bala de prata!
sexta-feira, 12 de novembro de 2010
momento histórico...
sexta-feira, 12 de novembro de 2010
sexta-feira, 12 de novembro de 2010
resolver problemas específicos
sexta-feira, 12 de novembro de 2010
por partes...sexta-feira, 12 de novembro de 2010
estrutura de dados
sexta-feira, 12 de novembro de 2010
chave-valor
sexta-feira, 12 de novembro de 2010
modelo
sexta-feira, 12 de novembro de 2010
família de colunassexta-feira, 12 de novembro de 2010
modeloKeyspace
Família de Colunas
.
.
.
chavelinha
coluna coluna coluna. . .coluna
chavelinha
coluna coluna coluna. . .coluna coluna coluna
nome valortimestamp
Coluna
sexta-feira, 12 de novembro de 2010
documento
sexta-feira, 12 de novembro de 2010
modelo
sexta-feira, 12 de novembro de 2010
grafo
sexta-feira, 12 de novembro de 2010
visão geral
sexta-feira, 12 de novembro de 2010
sexta-feira, 12 de novembro de 2010
sexta-feira, 12 de novembro de 2010
arquitetura
sexta-feira, 12 de novembro de 2010
ACID
sexta-feira, 12 de novembro de 2010
ACID
tomicityonsitencysolationurability
sexta-feira, 12 de novembro de 2010
para adotar nosql é
importante conhecer os
tradeoffs
sexta-feira, 12 de novembro de 2010
BASE
ref: BASE: an Acid Alternative por Dan Pritchettsexta-feira, 12 de novembro de 2010
BASE
asicallyvailableoft Stateeventually Consistent
sexta-feira, 12 de novembro de 2010
jogo de palavras
relaxamento das regras
sexta-feira, 12 de novembro de 2010
estado de fluxo
sexta-feira, 12 de novembro de 2010
Eventually Consistent
ref: Eventually Consistent por Werner Vogelssexta-feira, 12 de novembro de 2010
eventual em português: pode ou não ocorrer
eventual em inglês: irá ocorrer em algum
momento
sexta-feira, 12 de novembro de 2010
Consistência em Momento
Indeterminado
@mdedianasexta-feira, 12 de novembro de 2010
N, R e W
consistência
sexta-feira, 12 de novembro de 2010
intersecção
W+R > N
sexta-feira, 12 de novembro de 2010
não consistenteW+R = N
1+1 = 2
sexta-feira, 12 de novembro de 2010
consistenteW+R > N
2+2 = 3
sexta-feira, 12 de novembro de 2010
durabilidade
ref: The End of an Architectural Era por Michael Stonebraker & al.sexta-feira, 12 de novembro de 2010
cloud
sexta-feira, 12 de novembro de 2010
ref: The CAP Theorem por Seth Gilbert & Nancy Lynch
CAP
sexta-feira, 12 de novembro de 2010
CAP
onsistencyvailabilityartition Tolerance
sexta-feira, 12 de novembro de 2010
Consistency Availability
Partition Tolerance
CA
CP AP
sexta-feira, 12 de novembro de 2010
sexta-feira, 12 de novembro de 2010
★ latência★ performance★ particionamento★ distribuição★ replicação
ainda tem...
sexta-feira, 12 de novembro de 2010
persitência poliglota
sexta-feira, 12 de novembro de 2010
ferramentassexta-feira, 12 de novembro de 2010
sexta-feira, 12 de novembro de 2010
com tantas definições...com tantos conceitos...com tantos tradeoffs...
com tantos....
sexta-feira, 12 de novembro de 2010
como o nosql se tornou tão
sexy e popular?
sexta-feira, 12 de novembro de 2010
apesar de tudo....
é fácil usar!sexta-feira, 12 de novembro de 2010
public static void main(String[] args) { // Estabelece conexão com o Redis Jedis jedis = new Jedis("localhost"); // Adiciona o par chave-valor jedis.set("nome:da:chave", "novo valor"); // Busca o valor a partir da chave String valor = jedis.get("nome:da:chave"); System.out.println("Valor recuperado: " + valor); }
sexta-feira, 12 de novembro de 2010
public static void main(String args[]) throws UnknownHostException, MongoException { Mongo mongo = new Mongo();
DB db = mongo.getDB("MeuDatabase"); DBCollection coll = db.getCollection("pessoas");
DBObject dados = new BasicDBObject(); dados.put("nome", "Alexandre Porcelli"); dados.put("email", "[email protected]");
BasicDBObject endereco = new BasicDBObject();
endereco.put("rua", "r. qualquer"); endereco.put("numero", 1022);
dados.put("endereco", endereco);
coll.insert(dados);
mongo.close(); }
sexta-feira, 12 de novembro de 2010
public static void main(String args[]) throws UnknownHostException, MongoException { Mongo mongo = new Mongo();
DB db = mongo.getDB("MeuDatabase"); DBCollection coll = db.getCollection("pessoas");
DBObject busca = new BasicDBObject(); busca.put("nome", "Alexandre Porcelli");
DBObject documentoEncontrado = coll.findOne(busca);
System.out.println(documentoEncontrado);
mongo.close(); }
sexta-feira, 12 de novembro de 2010
public static void main(String[] args) { GraphDatabaseService graphDb = new EmbeddedGraphDatabase("db/matrix"); Transaction tx = graphDb.beginTx(); try { Node thomasAnderson = graphDb.createNode(); Node trinity = graphDb.createNode(); Node morpheus = graphDb.createNode(); Relationship link1 = thomasAnderson.createRelationshipTo(trinity, MeusTiposDeRelacionamento.CONHECE); Relationship link2 = trinity.createRelationshipTo(morpheus, MeusTiposDeRelacionamento.CONHECE); thomasAnderson.setProperty("nome", "Thomas Anderson"); trinity.setProperty("nome", "Trinity"); morpheus.setProperty("nome", "Morpheus"); morpheus.setProperty("cargo", "Capitão"); link1.setProperty("mensagem", "texto 1!"); link2.setProperty("mensagem", "texto 2!");
tx.success(); } finally { tx.finish(); graphDb.shutdown(); } }
sexta-feira, 12 de novembro de 2010
Perguntas?
sexta-feira, 12 de novembro de 2010
Obrigado
@porcelli
linkedin.com/in/alexandreporcelli
porcelli.com.br
github.com/porcelli
about.me/porcelli
sexta-feira, 12 de novembro de 2010