Nosql4java
-
Upload
otavio-goncalves-de-santana -
Category
Documents
-
view
230 -
download
1
Transcript of Nosql4java
![Page 1: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/1.jpg)
#NOSQL com Java
Otávio Santana@otaviojavahttp://www.java.net/blogs/otaviojava/http://otaviosantana.blogspot.com.br/
![Page 2: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/2.jpg)
![Page 3: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/3.jpg)
Data Science
● Terra● Ouro● Petróleo● Informação● Big Data
● Empirical ● Theoretical ● Computational● eScience
![Page 4: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/4.jpg)
Data Science
![Page 5: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/5.jpg)
![Page 6: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/6.jpg)
Flu trends
Redes Sociais
![Page 7: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/7.jpg)
Eleições
![Page 8: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/8.jpg)
Big Data
• 3 Vs (Velocidade, variedade e volume)
• Sem definição
![Page 9: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/9.jpg)
NOSQL
Não apenas SQLConhecer o melhor dos dois mundosUso específico
![Page 10: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/10.jpg)
A.C.I.D. vs B.A.S.E
•Atomicidade•Consistência•Isolamento•Durabilidade
Basicamente AvaliadoSoft-stateEventualmente persistente
![Page 11: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/11.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/12.jpg)
Classificação
Arquitetura Armazenamento Estr. Dados
Chave-ValorDocumentosGrafoFamília de Colunas
![Page 13: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/13.jpg)
Arquitetura Distribuída
Mestre Escravo P2P
A B C
mestre
![Page 14: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/15.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/16.jpg)
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 18: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/18.jpg)
Riak
• Não tem transação• VectorClock
http://basho.com/riak/
Valor
Bucket
vectorClock
![Page 19: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/21.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/22.jpg)
Livraria
• Cadastro de Livro simples (CRUD)• Autor, título, página, corpo, ISBN
![Page 23: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/26.jpg)
Session riak
session
request
![Page 27: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/27.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/28.jpg)
MongoDB
• Escrito C++• Escrita full index• Escritas Complexas• Leitura de agregação• Agregações• Master Slave• JSON
http://www.mongodb.org/
![Page 29: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/29.jpg)
MongoDB
• Download• Descompactar• Criar aqui mongo.config dentro de
MONGO_HOME\bin
http://www.mongodb.org/
![Page 30: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/30.jpg)
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 32: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/32.jpg)
MongoDBRealizar um simples CRUD para pessoa
• Nome, nascimento, cpf
http://www.mongodb.org/
![Page 33: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/33.jpg)
MongoDBRealizar um simples CRUD para usuarios
• Nome, login, senha, data inicio, data final
http://www.mongodb.org/
![Page 34: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/34.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/35.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/36.jpg)
Escrita
request
![Page 37: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/37.jpg)
Leitura
request
![Page 38: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/38.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/39.jpg)
Cassandra
• Família de Colunas• P2P• Feito em Java• Tolerância a falhas• Escalabilidade• índices
cassandra.apache.org
![Page 40: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/40.jpg)
Cassandra
• CQL – Cassandra Query Language• Map• List• Set• Atualizar vs Inserir• Não existe relação• Views materializadas!?!?
cassandra.apache.org
![Page 41: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/41.jpg)
Cassandra
• Download• Descompactar• Cd CASSANDRA_HOME\bin• ./cassandra -f
cassandra.apache.org
![Page 42: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/42.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/43.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/44.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/45.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/46.jpg)
Cassandra
GossipNível de consistênciaLeitura e Escrita
ANYONELOCAL_QUORUMEACH_QOURUMALL
Disponibilidade
Consistência
![Page 47: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/47.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/48.jpg)
•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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/49.jpg)
•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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/50.jpg)
• 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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/51.jpg)
Estrutura de Dados
Grafos
Redes sociais (Dados conectados) Mecanimos de recomendação
Transações complexas Não Grafos
![Page 52: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/52.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/53.jpg)
Neo4J
• Baixar Neo4J• Descompactar• Entrar em NEO4J_HOME/bin• ./neo4j start
http://www.neo4j.org
![Page 54: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/54.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/55.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/56.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/57.jpg)
Outras formas
Sistema de Arquivos Banco XML Banco de Dados OO
solução
problema
![Page 58: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/58.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/59.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/60.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/61.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/62.jpg)
Hadoop•Hadoop Common•Hadoop Distributed File System (HDFS™)•Hadoop YARN•Hadoop MapReduce•Ambari™•Avro™•Cassandra™•Chukwa™•HBase™•Hive™•Mahout™•Pig™•ZooKeeper™
![Page 63: Nosql4java](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/63.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/64.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/65.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/66.jpg)
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](https://reader033.fdocuments.in/reader033/viewer/2022042816/558e69ff1a28abfa658b464e/html5/thumbnails/67.jpg)
#Obrigado
Otávio Santana@otaviojavahttp://www.java.net/blogs/otaviojava/http://otaviosantana.blogspot.com.br/