Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

52
Globalcode – Open4education Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL Luiz Henrique Zambom Santana [email protected]

Transcript of Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Page 1: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Luiz Henrique Zambom [email protected]

Page 2: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 3: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 4: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 5: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 6: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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.”

Page 7: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Por que usar NoSQL?

Page 8: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Persistência poliglota

• O modelo certo para cada tipo de dados

Page 9: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Diferentes tipos de escalabilidade e complexidade

Page 10: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Diferença brutal de desempenho

• iColabora

Page 11: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Por que usar NoSQL?

Page 12: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Por que usar NoSQL?

Page 13: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados 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”

Page 14: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Arquiteturas comuns

Page 15: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Arquiteturas comuns

• Arquitetura Lambda

Page 16: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Arquitetura avançada

Page 17: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 18: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 19: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 20: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Modelagem

• Desafios•Pouco conhecimento•Múltiplos fornecedores• Múltiplos modelos• Muitas opções

Page 21: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 22: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Modelagem unificada?

Page 23: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Desnormalização• Desculpa Codd!

Page 24: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Agregação

• Aplicável a Chave-valor, Documentos e Colunar

• Cuidado especial durante as atualizações

Page 25: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 26: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 27: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 28: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 29: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Materialized Paths

• Aplicável em Chave-valor e Documentos• Uma maneira de tornar planos os modelos hierárquicos

Page 30: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Ferramentas para desenvolvimento

Page 31: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 32: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Spring Data

Page 33: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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>

Page 34: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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;

}

Page 35: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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));

Page 36: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Desenvolvimento

• PHP• Doctrine

Page 37: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Desenvolvimento

• Cuidado com ORM• Projeções

Page 38: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Nem tudo são flores...

Page 39: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

...e que nem todo dia tem sol...

Page 40: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 41: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Os dados devem ser consistentes!

Page 42: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Event-driven

Page 43: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Filas

Client API MongoDBUsuários

Usuários

Page 44: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Alteração em Batch com intervalos ou range

ElasticsearchAPI

Page 45: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 46: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 47: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

O que vem aí?

Page 48: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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/

Page 49: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Conclusões

Page 50: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 51: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

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

Page 52: Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL

Globalcode – Open4education

Temos vagas!