61
noSQL wtf?! sexta-feira, 12 de novembro de 2010

noSQL WTF?! - Citi2010

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: noSQL WTF?! - Citi2010

noSQL wtf?!

sexta-feira, 12 de novembro de 2010

Page 2: noSQL WTF?! - Citi2010

contexto

sexta-feira, 12 de novembro de 2010

Page 3: noSQL WTF?! - Citi2010

serviços websexta-feira, 12 de novembro de 2010

Page 4: noSQL WTF?! - Citi2010

falta de capitalsexta-feira, 12 de novembro de 2010

Page 5: noSQL WTF?! - Citi2010

mesmo assim...

sexta-feira, 12 de novembro de 2010

Page 6: noSQL WTF?! - Citi2010

“risco” de fazer sucesso

sexta-feira, 12 de novembro de 2010

Page 7: noSQL WTF?! - Citi2010

big data

sexta-feira, 12 de novembro de 2010

Page 8: noSQL WTF?! - Citi2010

história...

sexta-feira, 12 de novembro de 2010

Page 9: noSQL WTF?! - Citi2010

• 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

Page 10: noSQL WTF?! - Citi2010

next big thing?

sexta-feira, 12 de novembro de 2010

Page 11: noSQL WTF?! - Citi2010

abaixo o banco de

dados relacional!

sexta-feira, 12 de novembro de 2010

Page 12: noSQL WTF?! - Citi2010

abaixo ao banco de dados relacional!

como bala de prata!

sexta-feira, 12 de novembro de 2010

Page 13: noSQL WTF?! - Citi2010

momento histórico...

sexta-feira, 12 de novembro de 2010

Page 14: noSQL WTF?! - Citi2010

sexta-feira, 12 de novembro de 2010

Page 15: noSQL WTF?! - Citi2010

resolver problemas específicos

sexta-feira, 12 de novembro de 2010

Page 16: noSQL WTF?! - Citi2010

por partes...sexta-feira, 12 de novembro de 2010

Page 17: noSQL WTF?! - Citi2010

estrutura de dados

sexta-feira, 12 de novembro de 2010

Page 18: noSQL WTF?! - Citi2010

chave-valor

sexta-feira, 12 de novembro de 2010

Page 19: noSQL WTF?! - Citi2010

modelo

sexta-feira, 12 de novembro de 2010

Page 20: noSQL WTF?! - Citi2010

família de colunassexta-feira, 12 de novembro de 2010

Page 21: noSQL WTF?! - Citi2010

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

Page 22: noSQL WTF?! - Citi2010

documento

sexta-feira, 12 de novembro de 2010

Page 23: noSQL WTF?! - Citi2010

modelo

sexta-feira, 12 de novembro de 2010

Page 24: noSQL WTF?! - Citi2010

grafo

sexta-feira, 12 de novembro de 2010

Page 25: noSQL WTF?! - Citi2010

visão geral

sexta-feira, 12 de novembro de 2010

Page 26: noSQL WTF?! - Citi2010

sexta-feira, 12 de novembro de 2010

Page 27: noSQL WTF?! - Citi2010

sexta-feira, 12 de novembro de 2010

Page 28: noSQL WTF?! - Citi2010

arquitetura

sexta-feira, 12 de novembro de 2010

Page 29: noSQL WTF?! - Citi2010

ACID

sexta-feira, 12 de novembro de 2010

Page 30: noSQL WTF?! - Citi2010

ACID

tomicityonsitencysolationurability

sexta-feira, 12 de novembro de 2010

Page 31: noSQL WTF?! - Citi2010

para adotar nosql é

importante conhecer os

tradeoffs

sexta-feira, 12 de novembro de 2010

Page 32: noSQL WTF?! - Citi2010

BASE

ref: BASE: an Acid Alternative por Dan Pritchettsexta-feira, 12 de novembro de 2010

Page 33: noSQL WTF?! - Citi2010

BASE

asicallyvailableoft Stateeventually Consistent

sexta-feira, 12 de novembro de 2010

Page 34: noSQL WTF?! - Citi2010

jogo de palavras

relaxamento das regras

sexta-feira, 12 de novembro de 2010

Page 35: noSQL WTF?! - Citi2010

estado de fluxo

sexta-feira, 12 de novembro de 2010

Page 36: noSQL WTF?! - Citi2010

Eventually Consistent

ref: Eventually Consistent por Werner Vogelssexta-feira, 12 de novembro de 2010

Page 37: noSQL WTF?! - Citi2010

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

Page 38: noSQL WTF?! - Citi2010

Consistência em Momento

Indeterminado

@mdedianasexta-feira, 12 de novembro de 2010

Page 39: noSQL WTF?! - Citi2010

N, R e W

consistência

sexta-feira, 12 de novembro de 2010

Page 40: noSQL WTF?! - Citi2010

intersecção

W+R > N

sexta-feira, 12 de novembro de 2010

Page 41: noSQL WTF?! - Citi2010

não consistenteW+R = N

1+1 = 2

sexta-feira, 12 de novembro de 2010

Page 42: noSQL WTF?! - Citi2010

consistenteW+R > N

2+2 = 3

sexta-feira, 12 de novembro de 2010

Page 43: noSQL WTF?! - Citi2010

durabilidade

ref: The End of an Architectural Era por Michael Stonebraker & al.sexta-feira, 12 de novembro de 2010

Page 44: noSQL WTF?! - Citi2010

cloud

sexta-feira, 12 de novembro de 2010

Page 45: noSQL WTF?! - Citi2010

ref: The CAP Theorem por Seth Gilbert & Nancy Lynch

CAP

sexta-feira, 12 de novembro de 2010

Page 46: noSQL WTF?! - Citi2010

CAP

onsistencyvailabilityartition Tolerance

sexta-feira, 12 de novembro de 2010

Page 47: noSQL WTF?! - Citi2010

Consistency Availability

Partition Tolerance

CA

CP AP

sexta-feira, 12 de novembro de 2010

Page 48: noSQL WTF?! - Citi2010

sexta-feira, 12 de novembro de 2010

Page 49: noSQL WTF?! - Citi2010

★ latência★ performance★ particionamento★ distribuição★ replicação

ainda tem...

sexta-feira, 12 de novembro de 2010

Page 50: noSQL WTF?! - Citi2010

persitência poliglota

sexta-feira, 12 de novembro de 2010

Page 51: noSQL WTF?! - Citi2010

ferramentassexta-feira, 12 de novembro de 2010

Page 52: noSQL WTF?! - Citi2010

sexta-feira, 12 de novembro de 2010

Page 53: noSQL WTF?! - Citi2010

com tantas definições...com tantos conceitos...com tantos tradeoffs...

com tantos....

sexta-feira, 12 de novembro de 2010

Page 54: noSQL WTF?! - Citi2010

como o nosql se tornou tão

sexy e popular?

sexta-feira, 12 de novembro de 2010

Page 55: noSQL WTF?! - Citi2010

apesar de tudo....

é fácil usar!sexta-feira, 12 de novembro de 2010

Page 56: noSQL WTF?! - Citi2010

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

Page 57: noSQL WTF?! - Citi2010

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

Page 58: noSQL WTF?! - Citi2010

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

Page 59: noSQL WTF?! - Citi2010

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

Page 60: noSQL WTF?! - Citi2010

Perguntas?

sexta-feira, 12 de novembro de 2010