Nosql4java
-
Upload
otavio-goncalves-de-santana -
Category
Documents
-
view
230 -
download
1
Transcript of Nosql4java
#NOSQL com Java
Otávio Santana@otaviojavahttp://www.java.net/blogs/otaviojava/http://otaviosantana.blogspot.com.br/
Data Science
● Terra● Ouro● Petróleo● Informação● Big Data
● Empirical ● Theoretical ● Computational● eScience
Data Science
Flu trends
Redes Sociais
Eleições
Big Data
• 3 Vs (Velocidade, variedade e volume)
• Sem definição
NOSQL
Não apenas SQLConhecer o melhor dos dois mundosUso específico
A.C.I.D. vs B.A.S.E
•Atomicidade•Consistência•Isolamento•Durabilidade
Basicamente AvaliadoSoft-stateEventualmente persistente
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
Classificação
Arquitetura Armazenamento Estr. Dados
Chave-ValorDocumentosGrafoFamília de Colunas
Arquitetura Distribuída
Mestre Escravo P2P
A B C
mestre
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
CAP
•Consistência•Disponibilidade•Partição (tolerância)
•CA: Banco de dados Tradicionais•CP: BigTable, HBase, MongoDB•AP: Dynamo, Cassandra, Riak•Porcentagem
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)
Riak
• Não tem transação• VectorClock
http://basho.com/riak/
Valor
Bucket
vectorClock
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/
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/
Riak
• Sudo gedit /etc/security/limits.conf * soft nofile 65536 * hard nofile 65536
• Reiniciar a máquina• Sudo riak start
http://basho.com/riak/
Livraria
• Cadastro de Livro simples (CRUD)• Autor, título, página, corpo, ISBN
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
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
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
Session riak
session
request
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
MongoDB
• Escrito C++• Escrita full index• Escritas Complexas• Leitura de agregação• Agregações• Master Slave• JSON
http://www.mongodb.org/
MongoDB
• Download• Descompactar• Criar aqui mongo.config dentro de
MONGO_HOME\bin
http://www.mongodb.org/
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/
MongoDBRealizar um simples CRUD para pessoa
• Nome, nascimento, cpf
http://www.mongodb.org/
MongoDBRealizar um simples CRUD para usuarios
• Nome, login, senha, data inicio, data final
http://www.mongodb.org/
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/
MongoDB
• Informações da temperatura• cidade, temperatura, dia, atualizacao• Inserir uma cidade temperatura• Saber a média da cidade
http://www.mongodb.org/
Escrita
request
Leitura
request
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.)
Cassandra
• Família de Colunas• P2P• Feito em Java• Tolerância a falhas• Escalabilidade• índices
cassandra.apache.org
Cassandra
• CQL – Cassandra Query Language• Map• List• Set• Atualizar vs Inserir• Não existe relação• Views materializadas!?!?
cassandra.apache.org
Cassandra
• Download• Descompactar• Cd CASSANDRA_HOME\bin• ./cassandra -f
cassandra.apache.org
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
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
Cassandra
• Informações da temperatura• cidade, temperatura, dia, atualizacao• Inserir uma cidade temperatura• Saber a média da cidade
cassandra.apache.org
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
Cassandra
GossipNível de consistênciaLeitura e Escrita
ANYONELOCAL_QUORUMEACH_QOURUMALL
Disponibilidade
Consistência
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
•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]
•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
• 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.
Estrutura de Dados
Grafos
Redes sociais (Dados conectados) Mecanimos de recomendação
Transações complexas Não Grafos
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
Neo4J
• Baixar Neo4J• Descompactar• Entrar em NEO4J_HOME/bin• ./neo4j start
http://www.neo4j.org
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
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
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
Outras formas
Sistema de Arquivos Banco XML Banco de Dados OO
solução
problema
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/
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/
Lucene
• Cadastrar as músicas• A ideia é buscar a música a partir da
letra ou o nome do autor.
http://lucene.apache.org/
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/
Hadoop•Hadoop Common•Hadoop Distributed File System (HDFS™)•Hadoop YARN•Hadoop MapReduce•Ambari™•Avro™•Cassandra™•Chukwa™•HBase™•Hive™•Mahout™•Pig™•ZooKeeper™
Hadoop
●Usando o Map Reduce●1: Map(k1,v1) → list(k2,v2)●Chave e lista de Valores●2: Reduce(k2, list (v2)) → list(v3)
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/
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
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
#Obrigado
Otávio Santana@otaviojavahttp://www.java.net/blogs/otaviojava/http://otaviosantana.blogspot.com.br/