SlideShare a Scribd company logo
1 of 52
Globalcode – Open4education
Como modelar, integrar e desenvolver aplicações
com múltiplos bancos de dados NoSQL
Luiz Henrique Zambom Santana
lhzsantana@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 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
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ções
de 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!

More Related Content

What's hot

Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Fernando Boaglio
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
LelyBarros
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra)
Otávio Santana
 

What's hot (20)

No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2
 
MongoDB e Bancos de Dados Orientados a Documentos
MongoDB e Bancos de Dados Orientados a DocumentosMongoDB e Bancos de Dados Orientados a Documentos
MongoDB e Bancos de Dados Orientados a Documentos
 
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do InteriorPrimeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb java
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC
 
Elasticsearch 5.0
Elasticsearch 5.0Elasticsearch 5.0
Elasticsearch 5.0
 
Melhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud ComputingMelhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud Computing
 
Lições Aprendidas MongoDB
Lições Aprendidas MongoDBLições Aprendidas MongoDB
Lições Aprendidas MongoDB
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra)
 
Bancos de dados NoSQL
Bancos de dados NoSQLBancos de dados NoSQL
Bancos de dados NoSQL
 
Tdc2015
Tdc2015Tdc2015
Tdc2015
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Bancos NoSQL no Microsoft Azure
Bancos NoSQL no Microsoft AzureBancos NoSQL no Microsoft Azure
Bancos NoSQL no Microsoft Azure
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 

Viewers also liked

Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Sérgio Souza Costa
 

Viewers also liked (8)

Tipos De Modelagem P Dw
Tipos De Modelagem P DwTipos De Modelagem P Dw
Tipos De Modelagem P Dw
 
Modelagem de processos
Modelagem de processosModelagem de processos
Modelagem de processos
 
Modelagem de Processos de Negócio
Modelagem de Processos de NegócioModelagem de Processos de Negócio
Modelagem de Processos de Negócio
 
AULA 1 - CONCEITOS GERAIS APLICADOS NO CICLO DE VIDA DO SOFTWARE E MODELOS ...
AULA 1 - CONCEITOS GERAIS  APLICADOS NO CICLO DE VIDA  DO SOFTWARE E MODELOS ...AULA 1 - CONCEITOS GERAIS  APLICADOS NO CICLO DE VIDA  DO SOFTWARE E MODELOS ...
AULA 1 - CONCEITOS GERAIS APLICADOS NO CICLO DE VIDA DO SOFTWARE E MODELOS ...
 
Aula 1 Modelagem De Processos
Aula 1   Modelagem De ProcessosAula 1   Modelagem De Processos
Aula 1 Modelagem De Processos
 
Modelo bioecológico do desenvolvimento de Bronfenbrenner
Modelo bioecológico do desenvolvimento de BronfenbrennerModelo bioecológico do desenvolvimento de Bronfenbrenner
Modelo bioecológico do desenvolvimento de Bronfenbrenner
 
Sistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplosSistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplos
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
 

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

Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
Eric Lemes
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
pichiliani
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
pichiliani
 
Bancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBBancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDB
Paulo Bischof
 
Padrões de Design para MapReduce
Padrões de Design para MapReducePadrões de Design para MapReduce
Padrões de Design para MapReduce
Karla Okada
 

Similar to Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados NoSQL (20)

Data Vault - TDC 2020 Porto Alegre
Data Vault - TDC 2020 Porto AlegreData Vault - TDC 2020 Porto Alegre
Data Vault - TDC 2020 Porto Alegre
 
Introdução ao NoSQL e modelagem de dados com MongoDB
Introdução ao NoSQL e modelagem de dados com MongoDBIntrodução ao NoSQL e modelagem de dados com MongoDB
Introdução ao NoSQL e modelagem de dados com MongoDB
 
NoSQL no Microsoft Azure - Global Azure Bootcamp 2017
NoSQL no Microsoft Azure - Global Azure Bootcamp 2017NoSQL no Microsoft Azure - Global Azure Bootcamp 2017
NoSQL no Microsoft Azure - Global Azure Bootcamp 2017
 
Banco de dados nas nuvens - aula 2
Banco de dados nas nuvens - aula 2Banco de dados nas nuvens - aula 2
Banco de dados nas nuvens - aula 2
 
Internet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouInternet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começou
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
 
Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
Machine Learning Black Boxes
Machine Learning Black BoxesMachine Learning Black Boxes
Machine Learning Black Boxes
 
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho DuroTDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
 
FireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBFireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDB
 
Mongo db
Mongo dbMongo db
Mongo db
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
Bancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBBancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDB
 
Padrões de Design para MapReduce
Padrões de Design para MapReducePadrões de Design para MapReduce
Padrões de Design para MapReduce
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em Go
 
A Revolução já começou
A Revolução já começouA Revolução já começou
A Revolução já começou
 
Internet das coisas - A revolução já começou
Internet das coisas - A revolução já começouInternet das coisas - A revolução já começou
Internet das coisas - A revolução já começou
 

More from Luiz Henrique Zambom Santana

More from Luiz Henrique Zambom Santana (20)

Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...
Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...
Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...
 
Apache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with SparkApache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with Spark
 
De Arquiteto para Gerente: como debugar uma equipe
De Arquiteto para Gerente: como debugar uma equipeDe Arquiteto para Gerente: como debugar uma equipe
De Arquiteto para Gerente: como debugar uma equipe
 
VoltDB: as vantagens e os desafios dos banco de dados NewSQL
VoltDB: as vantagens e os desafios dos banco de dados NewSQLVoltDB: as vantagens e os desafios dos banco de dados NewSQL
VoltDB: as vantagens e os desafios dos banco de dados NewSQL
 
IBM Watson, Apache Spark ou TensorFlow?
IBM Watson, Apache Spark ou TensorFlow?IBM Watson, Apache Spark ou TensorFlow?
IBM Watson, Apache Spark ou TensorFlow?
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
 
Banco de dados nas nuvens - aula 3
Banco de dados nas nuvens - aula 3Banco de dados nas nuvens - aula 3
Banco de dados nas nuvens - aula 3
 
Banco de dados nas nuvens - aula 1
Banco de dados nas nuvens - aula 1Banco de dados nas nuvens - aula 1
Banco de dados nas nuvens - aula 1
 
Workload-Aware RDF Partitioning and SPARQL Query Caching for Massive RDF Gra...
Workload-Aware RDF Partitioning  and SPARQL Query Caching for Massive RDF Gra...Workload-Aware RDF Partitioning  and SPARQL Query Caching for Massive RDF Gra...
Workload-Aware RDF Partitioning and SPARQL Query Caching for Massive RDF Gra...
 
A middleware for storing massive RDF graphs into NoSQL
A middleware for storing massive RDF graphs into NoSQLA middleware for storing massive RDF graphs into NoSQL
A middleware for storing massive RDF graphs into NoSQL
 
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL Databases
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL DatabasesA Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL Databases
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL Databases
 
Normalização
NormalizaçãoNormalização
Normalização
 
SQL Joins
SQL JoinsSQL Joins
SQL Joins
 
Consultas básicas em SQL
Consultas básicas em SQLConsultas básicas em SQL
Consultas básicas em SQL
 
Processamento em Big Data
Processamento em Big DataProcessamento em Big Data
Processamento em Big Data
 
Workshop de ELK - EmergiNet
Workshop de ELK - EmergiNetWorkshop de ELK - EmergiNet
Workshop de ELK - EmergiNet
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHP
 
Design of Experiments on Federator Polystore Architecture
Design of Experiments on Federator Polystore ArchitectureDesign of Experiments on Federator Polystore Architecture
Design of Experiments on Federator Polystore Architecture
 
An Approach for RDF-based Semantic Access to NoSQL Repositories
An Approach for RDF-based Semantic Access to NoSQL RepositoriesAn Approach for RDF-based Semantic Access to NoSQL Repositories
An Approach for RDF-based Semantic Access to NoSQL Repositories
 
Survey on NoSQL integration
Survey on NoSQL integrationSurvey on NoSQL integration
Survey on NoSQL integration
 

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.”
  • 8. Globalcode – Open4education Persistência poliglota • O modelo certo para cada tipo de dados
  • 9. Globalcode – Open4education Diferentes tipos de escalabilidade e complexidade
  • 10. Globalcode – Open4education Diferença brutal de desempenho • iColabora
  • 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”
  • 15. Globalcode – Open4education Arquiteturas comuns • Arquitetura Lambda
  • 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
  • 20. Globalcode – Open4education Modelagem • Desafios •Pouco conhecimento •Múltiplos fornecedores • Múltiplos modelos • Muitas opções
  • 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
  • 24. Globalcode – Open4education Agregação • Aplicável a Chave-valor, Documentos e Colunar • Cuidado especial durante as atualizações
  • 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
  • 29. Globalcode – Open4education Materialized Paths • Aplicável em Chave-valor e Documentos • Uma maneira de tornar planos os modelos hierárquicos
  • 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));
  • 37. Globalcode – Open4education Desenvolvimento • Cuidado com ORM • Projeções
  • 38. Globalcode – Open4education Nem tudo são flores...
  • 39. Globalcode – Open4education ...e que nem todo dia tem sol...
  • 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
  • 41. Globalcode – Open4education Os dados devem ser consistentes!
  • 43. Globalcode – Open4education Filas Client API MongoDBUsuários Usuários
  • 44. Globalcode – Open4education Alteração em Batch com intervalos ou range ElasticsearchAPI
  • 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
  • 51. 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