Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL
1. Globalcode – Open4education
Como modelar, integrar e desenvolver aplicações
com múltiplos bancos de dados NoSQL
Luiz Henrique Zambom Santana
lhzsantana@gmail.com
2. Globalcode – Open4education
Agenda
• Objetivos
• NoSQL?
• Por que usar NoSQL?
• “No size fits all”
• Arquiteturas comuns
• Modelagem
• Desenvolvendo para múltiplos NoSQL (e SQL)
• O que vem aí?
• Conclusões
3. Globalcode – Open4education
Objetivos
• Com a evolução dos bancos de dados NoSQL
tornou-se comum o desenvolvimento de
aplicações cujos dados estão armazenados - e
replicados - em múltiplos bancos de dados. Nesse
cenário, modelar, integrar e desenvolver não é
mais como era antigamente. Essa palestra discute
arquiteturas, ferramentas e novos padrões de
desenvolvimento que permitem explorar ao
máximo as capacidades os diversos modelos
NoSQL e facilitam sua integração com técnicas
tradicionais do desenvolvimento de software.
Uma visão sobre
NoSQL desde a
perspectiva de um
desenvolvedor
4. Globalcode – Open4education
Apresentação
• Doutorando na UFSC
• Consultor e programador
• Trabalhando com Elasticsearch desde 2013 (versão
0.9.x)
• Autor de artigos, luizsantana.info e livros
5. Globalcode – Open4education
NoSQL
Not only SQL
Sadalage e Fowler, 2012
http://martinfowler.com/books/nosql.html
“Banco de Dados Relacional
será nota de rodapé na história”
Nathan Marz, 2014
http://goo.gl/WGXvPy
6. Globalcode – Open4education
“Sem tamanho único”
• “a panoply of data models,
and they typically operate on
flexible storage formats such
as JSON”
• “Increasingly, we see
applications that deploy
multiple engines, resulting in
a need to join data across
systems.”
13. Globalcode – Open4education
Vantagens e desvantagens
(em relação ao SQL)
Vantagens Desvantagens
Maior desempenho Transações limitadas
Maior escalabilidade Limitação nas consultas*
Modelos de dados mais ricos Consistência relaxada
Schema-less “Dados não relacionados”
17. Globalcode – Open4education
Problemas
• Escolha do modelo
• Modelagem
• Falta de esquema
• Sincronização
• Controle de transação
• Evolução de modelo
• Diferenças de implementação
• Diferenças de desempenho
• Falta de capacidade técnica
18. Globalcode – Open4education
Como escolher o modelo NoSQL?
Modelo Bom Ruim
Chave-valor Informações de sessão,
perfis de usuário,
preferências, carrinho de
compras
Quando é necessário fazer
consultas nos dados, quando
há relacionamento entre as
informações, ou
necessitamos acessar as
informações através de
múltiplas chave
Documentos Sistemas de gerenciamento
de conteúdo, blogs, web
analytics, análise em tempo
real, e aplicações
de comércio
Transações complexas que
abrangem várias operações
ou consultas em diversas
estruturas agregadas
19. Globalcode – Open4education
Como escolher o modelo NoSQL?
Modelo Bom Ruim
Colunar Sistemas de gerenciamento
de conteúdo, plataformas
de blogs, contadores,
aplicações que possuem
um volume de escrita muito
grande
Sistemas que estão no início
do desenvolvimento ou que
possuam mudanças
frequentes nos seus padrões
de consulta
Grafos Dados conectados, tais
como redes sociais, dados
espaciais, informações de
roteamento para bens e
dinheiro, mecanismos de
recomendação
Modelo de dados simples
21. Globalcode – Open4education
Modelagem unificada?
Conceito RDBMS NoSQL
Entity Table Collection / Column Family
Entity instance Row Document / Row
Property Column Key / Column
Property of an entity
instance
Cell Value Field Value
Domain Data type Data type (Some NoSQL database no data
type, all of value is plain text.)
Relationship Constraint Reference, Embedded, Additional table, row
across multiple column families.
Key Index Index, Additional
table, Reference
Unique identification Primary Key Row Key
25. Globalcode – Open4education
Joins na aplicação
• Aplicável em Chave-valor, Documentos, Colunar e Grafos
• As vezes é inevitável
• Entidade aninhada é atualizada de forma frequente
• Many-to-many
26. Globalcode – Open4education
Agregações atômicas
• Aplicável em Chave-valor, Documentos, Colunar e Grafos
• As vezes é inevitável
• Desnormalizar as vezes facilita o controle de
transações
27. Globalcode – Open4education
Inverted Search – Direct
Aggregation
• Aplicável em Chave-valor, Documentos
e Colunar
• Armazenar os dados agregados de
diversas formas para facilitar
agregações posteriores
28. Globalcode – Open4education
Tree Aggregation
• Aplicável em Chave-valor
e Documentos
• Facilita o acesso quando
os dados devem ser
apresentados em
conjunto
• Busca e atualizações
podem ser complicadas e
ineficientes
31. Globalcode – Open4education
Desenvolvimento
• Dificuldades:
•Não existe uma linguagem única
•Não existe um padrão (como o JDBC)
•Muitas vezes as aplicações também falam SQL
• Algumas frameworks estão surgindo para facilitar o
desenvolvimento com NoSQL
• Java
•Spring Data suporta muitos de bancos de dados NoSQL
•GemFire, Redis, MongoDB, Neo4j, Solr, Elasticsearch, Couchbase,
FuzzyDB
• PHP
•Doctrine está começando a suportar NoSQL
•MongoDB, Elasticsearch, Cassandra, CouchDB
33. Globalcode – Open4education
Exemplo Spring Data
•Usando Maven
<dependencies>
<!-- other dependency elements omitted -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
</dependencies>
34. Globalcode – Open4education
Exemplo Spring Data
•Criando uma classe
package org.spring.cassandra.example;
import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
@Table
public class Person {
@PrimaryKey
private String id;
private String name;
}
35. Globalcode – Open4education
Exemplo Spring Data
•Acessando dados com Spring Data
package org.spring.cassandra.example;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.core.CassandraTemplate;
public class CassandraApp {
…
cluster = Cluster.builder().addContactPoints(InetAddress.getLocalHost()).build();
session = cluster.connect("mykeyspace");
CassandraOperations cassandraOps = new CassandraTemplate(session);
cassandraOps.insert(new Person("1234567890", "David", 40));
40. Globalcode – Open4education
Reconciliação
• Reparação na leitura:
• A correção é feita quando uma leitura encontra uma
inconsistência.
• Reparação na escrita:
• A correção ocorre durante uma operação de gravação,
porém dificulta e onera operação de gravação.
• Reparação assíncrona
45. Globalcode – Open4education
Fontes de problemas
• Falta de esquema
• Evolução de esquema
• Diferenças no tempo de processamento
• Existe uma grande diferença nos tempos de
processamento entre os bancos de dados
• Tratamento de erros
• Transações Idempotente
• Não tirar informações da fila até que tenha sido
realmente atualizadas
46. Globalcode – Open4education
Sincronização
• Anti-Pattern?
•Problemas de desempenho
•Atualizações parciais?
•O que acontece na exclusão?
•Em atualizações bulk?
Nome Cidade Indexado?
Maria Lages SIM
José Lins SIM
João Florianópolis NÃO
48. Globalcode – Open4education
Questões não abordadas
•Como integrar com sistemas legados?
•Como migrar de SQL para NoSQL?
•Outros tipos de dados: media (imagens, sons,
vídeos),
•Outros modelos: XML e objetos
•Integração com outras ferramentas, principalmente
para processamento
•Problemas de desempenho
•Falta de capacidade técnica
•Event sourcing e CQRS
•Integração entre modelos
•https://www.arangodb.com/
50. Globalcode – Open4education
Conclusões
•SQL, NoSQL, ou a integração entre eles?
•NoSQL + SQL parece mais prudente
•Atenção aos padrões de desenvolvimento
•Muito ainda está na mão dos desenvolvedores
•Cuidados
•Evolução de esquema
•Sincronismo
•Busca/Consulta em NoSQL apresentação em SQL
•Estão surgindo algumas ferramentas mais
completas de integração