Post on 13-Feb-2017
Globalcode – Open4education
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL
Luiz Henrique Zambom Santanalhzsantana@gmail.com
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
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
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
Globalcode – Open4education
NoSQL
Not only SQLSadalage e Fowler, 2012http://martinfowler.com/books/nosql.html
“Banco de Dados Relacional será nota de rodapé na história”
Nathan Marz, 2014http://goo.gl/WGXvPy
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.”
Globalcode – Open4education
Por que usar NoSQL?
Globalcode – Open4education
Persistência poliglota
• O modelo certo para cada tipo de dados
Globalcode – Open4education
Diferentes tipos de escalabilidade e complexidade
Globalcode – Open4education
Diferença brutal de desempenho
• iColabora
Globalcode – Open4education
Por que usar NoSQL?
Globalcode – Open4education
Por que usar NoSQL?
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”
Globalcode – Open4education
Arquiteturas comuns
Globalcode – Open4education
Arquiteturas comuns
• Arquitetura Lambda
Globalcode – Open4education
Arquitetura avançada
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
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çõesde comércio
Transações complexas que abrangem várias operações ou consultas em diversas estruturas agregadas
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
Globalcode – Open4education
Modelagem
• Desafios•Pouco conhecimento•Múltiplos fornecedores• Múltiplos modelos• Muitas opções
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
Globalcode – Open4education
Modelagem unificada?
Globalcode – Open4education
Desnormalização• Desculpa Codd!
Globalcode – Open4education
Agregação
• Aplicável a Chave-valor, Documentos e Colunar
• Cuidado especial durante as atualizações
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
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
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
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
Globalcode – Open4education
Materialized Paths
• Aplicável em Chave-valor e Documentos• Uma maneira de tornar planos os modelos hierárquicos
Globalcode – Open4education
Ferramentas para desenvolvimento
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
Globalcode – Open4education
Spring Data
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>
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;
}
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));
Globalcode – Open4education
Desenvolvimento
• PHP• Doctrine
Globalcode – Open4education
Desenvolvimento
• Cuidado com ORM• Projeções
Globalcode – Open4education
Nem tudo são flores...
Globalcode – Open4education
...e que nem todo dia tem sol...
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
Globalcode – Open4education
Os dados devem ser consistentes!
Globalcode – Open4education
Event-driven
Globalcode – Open4education
Filas
Client API MongoDBUsuários
Usuários
Globalcode – Open4education
Alteração em Batch com intervalos ou range
ElasticsearchAPI
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
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
Globalcode – Open4education
O que vem aí?
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/
Globalcode – Open4education
Conclusões
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
Globalcode – Open4education
Materiais recomendados• https://spring.io/understanding/NoSQL• http://www.cio.com/article/3033218/open-source-tools/10-tips-for-integrating-nosql-
databases-in-your-business.html• https://www.youtube.com/watch?v=KRcecxdGxvQ• http://www.planetcassandra.org/what-is-nosql/• http://pt.slideshare.net/fabiofumarola1/data-modeling-for-nosql-12• http://www.infoq.com/articles/spring-data-intro• http://pt.slideshare.net/beberlei/doctrine-for-nosql• http://www.informit.com/articles/article.aspx?p=1930511&seqNum=4• http://queue.acm.org/detail.cfm?id=1394128• http://pt.slideshare.net/MikeDias/index-activiti-data-on-elasticsearch• https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/• https://highlyscalable.wordpress.com/2012/01/07/mvcc-transactions-key-value/• https://www.elastic.co/blog/found-keeping-elasticsearch-in-sync
Globalcode – Open4education
Temos vagas!