Nosql4java

67
#NOSQL com Java Otávio Santana @otaviojava http://www.java.net/blogs/otaviojava/ http://otaviosantana.blogspot.com.br/

Transcript of Nosql4java

Page 1: Nosql4java

#NOSQL com Java

Otávio Santana@otaviojavahttp://www.java.net/blogs/otaviojava/http://otaviosantana.blogspot.com.br/

Page 2: Nosql4java
Page 3: Nosql4java

Data Science

● Terra● Ouro● Petróleo● Informação● Big Data

● Empirical ● Theoretical ● Computational● eScience

Page 4: Nosql4java

Data Science

Page 5: Nosql4java
Page 6: Nosql4java

Flu trends

Redes Sociais

Page 7: Nosql4java

Eleições

Page 8: Nosql4java

Big Data

• 3 Vs (Velocidade, variedade e volume)

• Sem definição

Page 9: Nosql4java

NOSQL

Não apenas SQLConhecer o melhor dos dois mundosUso específico

Page 10: Nosql4java

A.C.I.D. vs B.A.S.E

•Atomicidade•Consistência•Isolamento•Durabilidade

Basicamente AvaliadoSoft-stateEventualmente persistente

Page 11: Nosql4java

SQL vs NOSQL•Driver•SQL ANSI•Transação•Alto custo de IO•Fácil troca de Banco•Relacionamento

•API•Não padronizado•Não Transação•Busca por chave•Difícil troca de Banco•Não relacionamento

Page 12: Nosql4java

Classificação

Arquitetura Armazenamento Estr. Dados

Chave-ValorDocumentosGrafoFamília de Colunas

Page 13: Nosql4java

Arquitetura Distribuída

Mestre Escravo P2P

A B C

mestre

Page 14: Nosql4java

Arquitetura Distribuída

Fragmentação Réplica

A

BD

C

ABCD

ABCD

ABCD

ABCD

Servidor com informações diferentes Servidor com as mesmas informações

Page 15: Nosql4java

CAP

•Consistência•Disponibilidade•Partição (tolerância)

•CA: Banco de dados Tradicionais•CP: BigTable, HBase, MongoDB•AP: Dynamo, Cassandra, Riak•Porcentagem

Page 16: Nosql4java

Estrutura de Dados

Chave-valorSQL Riak

Banco de Dados Cluster Riak

Tabela Bucket

Linha chave-valor

Chave Primária chave

Informações da sessão Perfis de usuário Carrinho de compras

Relacionamento Transações complexas Consulta por dados (não

chave)

Page 17: Nosql4java

Riak

• Possui transação• Comunicação também via Rest

http://basho.com/riak/

Page 18: Nosql4java

Riak

• Não tem transação• VectorClock

http://basho.com/riak/

Valor

Bucket

vectorClock

Page 19: Nosql4java

Riak

• Baixar riak• sudo dpkg -i riak_1.4.7-1_amd64.deb• Sudo gedit

/etc/pam.d/common-sessionsudo /gedit/etc/pam.d/common-session-noninteractivesession required pam_limits.so

http://basho.com/riak/

Page 20: Nosql4java

Riak

• Baixar riak• sudo dpkg -i riak_1.4.7-1_amd64.deb• Sudo gedit

/etc/pam.d/common-sessionsudo gedit /etc/pam.d/common-session-noninteractivesession required pam_limits.so

http://basho.com/riak/

Page 21: Nosql4java

Riak

• Sudo gedit /etc/security/limits.conf * soft nofile 65536 * hard nofile 65536

• Reiniciar a máquina• Sudo riak start

http://basho.com/riak/

Page 22: Nosql4java

Livraria

• Cadastro de Livro simples (CRUD)• Autor, título, página, corpo, ISBN

Page 23: Nosql4java

Carrinhos de compras

Criar uma interface para o usuário e suas compras

O usuário terá suas informações (e-mail ou nickname, endereço)

Além do seu carrinho de compras (Produto, nome, valor, quantidade)

Valor total tempo: 40 minutos

Page 24: Nosql4java

Session Server

há um maior consumo de memória no lado servidorProblemas com o back-button

do browserclustering

baixo consumo de banda na rede;baixo consumo de memória no

cliente;uso de cpu no servidor é baixo;melhora comunição via AJAX

session session

request

Page 25: Nosql4java

Session Client

Alto consumo de banda da rede;Maior overhead de cpu no

servidor e cliente;Maior consumo de memória

no lado cliente;problemas de segurança;

menos memória do lado do servidorsem consumo de memória entre

requestsmelhora escalabilidade da

aplicação

sessionrequest

Page 26: Nosql4java

Session riak

session

request

Page 27: Nosql4java

Estrutura de Dados

DocumentosSQL MongoDB

Banco de Dados Instância

Tabela Coleção

Linha Documento

Chave Primária _id

CMS Análise Web Leitura em larga escala

Transações complexas

Page 28: Nosql4java

MongoDB

• Escrito C++• Escrita full index• Escritas Complexas• Leitura de agregação• Agregações• Master Slave• JSON

http://www.mongodb.org/

Page 29: Nosql4java

MongoDB

• Download• Descompactar• Criar aqui mongo.config dentro de

MONGO_HOME\bin

http://www.mongodb.org/

Page 30: Nosql4java

MongoDB

##store data here• dbpath=/home/otaviojava/Ambiente/

nosql/mongodb/mongodb/data##all output go here

• logpath=/home/otaviojava/Ambiente/nosql/mongodb/mongodb/mongo.log ##log read and write operations

• diaglog=3

http://www.mongodb.org/

Page 31: Nosql4java

MongoDB

./mongod --config mongo.config

http://www.mongodb.org/

Page 32: Nosql4java

MongoDBRealizar um simples CRUD para pessoa

• Nome, nascimento, cpf

http://www.mongodb.org/

Page 33: Nosql4java

MongoDBRealizar um simples CRUD para usuarios

• Nome, login, senha, data inicio, data final

http://www.mongodb.org/

Page 34: Nosql4java

MongoDBMedidor de temperatura

Objetivo é saber a temperatura de uma determinada cidade, essas informações são repassadas todos os dias no período de maior ociosidade computacional, madrugada. Caso existe uma atualização é atualizado o número da versão. Essa informação vai para vários sites, mídias, etc.

http://www.mongodb.org/

Page 35: Nosql4java

MongoDB

• Informações da temperatura• cidade, temperatura, dia, atualizacao• Inserir uma cidade temperatura• Saber a média da cidade

http://www.mongodb.org/

Page 36: Nosql4java

Escrita

request

Page 37: Nosql4java

Leitura

request

Page 38: Nosql4java

Estrutura de Dados

Família de ColunasSQL Cassandra

Banco de Dados KeySpace

Tabela Família de Colunas

Linha Linha

Chave Primária chave

Registrado de Evento (log) CMS Contadores (categorizar) Escrita Complexa

Transações ACID Relação Leitura complexa (SUM,

AVG, etc.)

Page 39: Nosql4java

Cassandra

• Família de Colunas• P2P• Feito em Java• Tolerância a falhas• Escalabilidade• índices

cassandra.apache.org

Page 40: Nosql4java

Cassandra

• CQL – Cassandra Query Language• Map• List• Set• Atualizar vs Inserir• Não existe relação• Views materializadas!?!?

cassandra.apache.org

Page 41: Nosql4java

Cassandra

• Download• Descompactar• Cd CASSANDRA_HOME\bin• ./cassandra -f

cassandra.apache.org

Page 42: Nosql4java

Cassandra

Crie um programa que envie mensagens, elas deverão ser enviadas a partir de um usuário.

• A ideia é que se busque pelo usuário e pelo código da mensagem.

• Nome, mensagem, id, data envio

cassandra.apache.org

Page 43: Nosql4java

CassandraMedidor de temperatura

Objetivo é saber a temperatura de uma determinada cidade, essas informações são repassadas todos os minutos. Essa informação vai para vários sites, mídias, etc.

cassandra.apache.org

Page 44: Nosql4java

Cassandra

• Informações da temperatura• cidade, temperatura, dia, atualizacao• Inserir uma cidade temperatura• Saber a média da cidade

cassandra.apache.org

Page 45: Nosql4java

CassandraMedidor de temperatura

Objetivo é saber a temperatura de uma determinada cidade, essas informações são repassadas todos os dias no período de maior ociosidade computacional, madrugada. Caso existe uma atualização é atualizado o número da versão. Essa informação vai para vários sites, mídias, etc.

cassandra.apache.org

Page 46: Nosql4java

Cassandra

GossipNível de consistênciaLeitura e Escrita

ANYONELOCAL_QUORUMEACH_QOURUMALL

Disponibilidade

Consistência

Page 47: Nosql4java

Cassandra

Commit logMemtableSSTable

request

Commit logMemtable

SSTable

escrever (k1, c1:v1)escrever (k2, c1:v1 C2:v2)escrever (k1, c1:v4 c3:v3 c2:v2)

k1 c1:v4 c2:v2 c3:v3k2 c1:v1 c2:v2 k1, c1:v1

k2, c1:v1 C2:v2k1, c1:v4 c3:v3 c2:v2

k1 c1:v4 c2:v2 c3:v3k2 c1:v1 c2:v2

Page 48: Nosql4java

•Distribuição e réplica

Distribuição e réplica: Ocorrem ao mesmo tempo A primeira inserção é baseado na chave Particionador Define Segunda cópia réplica

Jim Carro: Camaro Idade: 32

carol Cor: rosa

Suzy Time: Bahia

Jim 1

carol 3

Suzy 15

rowkey

rowkey Partitioner

A[0-3]

B[4-8]

C[9-13]

D[14-18]

Page 49: Nosql4java

•Partitioner

Partitioner: determina como será distribuído as informações através dos nós.

Hash da Chave Murmur3Partitioner(default) RandomPartitioner (MD5) ByteOrderedPartitioner (não recomendado)

Jim -2245462676723223822

carol 7723358927203680754

Suzy 1168604627387940318

rowkey Murmur3 Partitioner

Page 50: Nosql4java

• Replica placement strategy

Replica placement strategy: define como será realiza as cópias (réplicas da informação)

Fator de réplica: Define a unidade de nós que serão copiadosSimpleStrategy: usa apenas um único datacenter.NetworkTopologyStrategy: para mais de um datacenter,

recomendados para uma tendência de crescimento futura.

Page 51: Nosql4java

Estrutura de Dados

Grafos

Redes sociais (Dados conectados) Mecanimos de recomendação

Transações complexas Não Grafos

Page 52: Nosql4java

Neo4J

• Possui transação• Possui relacionamento• API em rest• Cypher Query Language• Feito em Java• Master Slave• Master o mais antigo• Eleição automática

http://www.neo4j.org

Page 53: Nosql4java

Neo4J

• Baixar Neo4J• Descompactar• Entrar em NEO4J_HOME/bin• ./neo4j start

http://www.neo4j.org

Page 54: Nosql4java

Neo4J http://www.neo4j.org

Nome: Homem

Nome: Leão

Nome: raposa

Nome: rato

•Desenhar cadeia alimentar•Imprimira relação entre os animais• Exibir os animais que comem alguém

Page 55: Nosql4java

Neo4J http://www.neo4j.org

Nome: Jonh

Nome: JoeNome: Sara

Nome: SteveNome: Maria

●Desenhar cadeia de amizade●Informar os amigos ●Informar os amigos dos amigos de Jonh

Page 56: Nosql4java

Neo4J http://www.neo4j.org

Nome: OtávioLing: JavaIdade: 25

Nome: BrunoLing: JavaIdade: 42

Nome: MárcioLing: PHPIdade: 32

Nome: LuizLing: Python

Idade: 30

Nome: MaurícioLing: Python

Idade: 26

Nome: EdsonLing: JavaIdade: 30

Nome: MarlonLing: Ruby

28

Desenhar as relaçõesOtávio precisa de amigos, indique a partir da proximidade

Page 57: Nosql4java

Outras formas

Sistema de Arquivos Banco XML Banco de Dados OO

solução

problema

Page 58: Nosql4java

Lucene

Realizar buscas é um ponto fraco na maiorias dos Bancos NoSQL e pode ser nos tradicionais quando se trata de um texto muito grande.

http://lucene.apache.org/

Page 59: Nosql4java

Lucene

• Roda com um heap pequeno – 1MB• Executa com grande volume • Alto desempenho com indexação• Eficientes algoritmos de busca• Feito em Java• Configurável – Memória ou HD

http://lucene.apache.org/

Page 60: Nosql4java

Lucene

• Cadastrar as músicas• A ideia é buscar a música a partir da

letra ou o nome do autor.

http://lucene.apache.org/

Page 61: Nosql4java

Lucene

Conteúdo do linguágil• Cadastrar a minibiografia, título,

descrição, nome do autor• Permitir a busca pela minibiografia e

descrição, buscar pelo “nome exato”.

http://lucene.apache.org/

Page 62: Nosql4java

Hadoop•Hadoop Common•Hadoop Distributed File System (HDFS™)•Hadoop YARN•Hadoop MapReduce•Ambari™•Avro™•Cassandra™•Chukwa™•HBase™•Hive™•Mahout™•Pig™•ZooKeeper™

Page 63: Nosql4java

Hadoop

●Usando o Map Reduce●1: Map(k1,v1) → list(k2,v2)●Chave e lista de Valores●2: Reduce(k2, list (v2)) → list(v3)

Page 64: Nosql4java

DataGrid

● Cache em múltiplos servidores● Chave valor● Velocidade

Leitura Escrita0

5000

10000

15000

20000

25000

Velocidade dos Dispositivos

Leitura em MB/s

SSD PCI Express

SSD SATA

SATA HDD 10,000

DDR3-2500

fonte: http://highscalability.com/

Page 65: Nosql4java

DataGrid

●Bélády's Algorithm: O ambiente perfeito●Least Recently Used (LRU): Remove o menos recente usado●Most Recently Used (MRU): Removo o mais recente usado●Pseudo-LRU (LRU): LRU com proabilidade

Page 66: Nosql4java

DataGrid

●Random Replacement (RR): Remove aleatória●Segmented LRU (SLRU): LRU em segmentos●Low Inter-reference Recency Set (LIRS): Novo LRU●Least Frequently Used (LFU): Remove o menos utilizado (contador)●Adaptive Replacement Cache (ARC): LRU e LFU

Page 67: Nosql4java

#Obrigado

Otávio Santana@otaviojavahttp://www.java.net/blogs/otaviojava/http://otaviosantana.blogspot.com.br/