SlideShare uma empresa Scribd logo
Persistência
Poliglota e
NoSQL
Christiano Anderson
anderson@propus.com.br
Twitter: @dump
Agenda
● Quem sou eu
● A era de ouro dos bancos relacionais
● Bancos Não Relacionais
● Por que usar persistência poliglota
● Exemplos
Quem sou eu
● Trabalha com internet/devel desde 1996;
● Colabora com diversos projetos livres;
● Fundador do MUG-SP;
● Especialista em NoSQL / Big Data;
● Blog: http://christiano.me
● Twitter: @dump
● Email: anderson@propus.com.br
A era de ouro dos
Bancos relacionais
Bancos Relacionais
● Opções populares,
como MySQL,
PostgreSQL e Oracle
● Sempre foram a
primeira opção ao
desenvolver qualquer
aplicação
● Muitas ferramentas
● Muita gente
qualificada no
mercado
● Suporte amplo e fácil
de encontrar, inclusive
do fabricante
● Acabou se tornando
um “padrão”
O modelo relacional
● Dados armazenados em tabelas;
● Relacionamentos;
● Normalização de dados;
● Necessidade de schema;
Vantagens do modelo relacional
● SQL → Quase todo mundo conhece;
– Linguagem bem flexível;
– Muitos operadores, stored procedures, boas
ferramentas;
● Dados bem padronizados, normalizados;
– Relacionamento;
– Join, group by, integridade relacional, etc
Vantagens do modelo relacional
● ACID
– Atomicidade (tudo ou nada);
– Consistência (validação, respeita integridade);
– Isolamento (concorrência retorna resultado válido);
– Durabilidade (uma vez gravado, é definitivo)
Desvantagens do modelo relacional
● Dependência da modelagem, qualquer
alteração, precisa passar por uma migração;
● Dificuldade para manter aplicações que
crescem muito rápido;
● Dificuldade na Escalabilidade
– Vertical (o banco está lento, mete mais memória na
máquina);
– Compra uma máquina melhor;
E quando o banco começa ficar lento?
Contrata um cara para criar índices
E de fato fica um pouco melhor, mas não resolve
100%
Contrata um cara para criar views e
queries complexas
Melhora mais um pouco, só que vira um pesadelo
para manter...
Contrata um cara para criar cache
na aplicação
Fica ainda melhor, mas a informação começa ser
duplicada
Not Only SQL
Novo paradigma
● Na verdade, nem tão novo assim;
● Liberdade de schema e modelagem;
● Escalabilidade horizontal (fica lento, coloca
mais máquina);
– Pode ser máquinas comuns;
● Muito fácil e simples colocar em cluster
– Muitos seguem o teorema de CAP
Não é bala de prata
● Fazemos três tipos de serviços:
– Bom, Barato, Rápido
● Se for BOM e BARATO não vai ser RÁPIDO
● Se for BARATO e RÁPIDO não vai ser BOM
● Se for BOM e RÁPIDO não vai ser BARATO
Escolha bem os recursos que precisa
Abra mão de outros
Teorema de CAP
Teorema de CAP
Consistency (Todos os nós possuem o mesmo dado ao mesmo tempo);
Availability (Garantia que todas as requisições recebam um retorno true ou false)
Partition tolerance (o sistema continua operando mesmo se parte do nó estive
inacessível)
De acordo com o teorema, sistemas distribuídos
não podem atender aos três requisitos ao mesmo
tempo, atendem um ou dois.
Desnormalizar
● NoSQL não trabalha de forma normalizada
– Duplicidade?
– Falta de Consistência?
● Isso pode ser bom ou ruim dependendo da sua
aplicação
Aprender novo modelo de fazer
consultas ao banco
● Muitos NoSQL não trabalham com conceito de
queries, mas utilizam filtros;
– Você precisa estar preparado para integrar novas
formas de acesso a dados na sua aplicação
– Possui curva de aprendizado (tênue, mas possui)
Esqueça SQL e modelagem
● Aprenda como o NoSQL funciona, nunca, mas
nunca pense da mesma forma que no
relacional;
– O segredo do sucesso chama-se Schema Design
Deixe de lado ORMs tradicionais
● ORM tradicionais (como SQLAlchemy) não
funcionam com NoSQL e nem vão funcionar;
● Estude bem o driver apropriado da sua
linguagem de programação favorita,
provavelmente terá suporte ao NoSQL que
você escolher.
SQL vs NoSQL
SQL NoSQL
Uma única máquina Um Cluster
Escala verticalmente Escala horizontalmente
Full Index Baseado em chaves
SQL Possui API e filtros de
pesquisa
Identifique qual NoSQL mais
apropriado para sua aplicação
● Orientação a Documento;
● Chave/Valor;
● Grafos;
● Colunar;
Qual a melhor ferramenta?
Orientação a documentos
Exemplo de documento
{
“_id”: ObjectId("53582acf31f36c9a248e4c15"),
“nome”: “Christiano Anderson”,
“contato”: {
“email”: “chris@christiano.me”,
“celular”: “11999998888”,
},
“sites”: {
“blog”: “http://christiano.me”,
“mongodb”: “http://www.mongodb.org”
},
“tecnologias”: [“mongodb”,”python”,”big data”,”nosql”]
}
Chave/Valor
Grafos
Colunar
Persistência Poliglota
● Uma aplicação eficiente é aquela que atende
bem seu objetivo e está sempre disponível
quando é requisitada;
– Escalável
– Segura
– Nunca é o gargalo para inovações
Persistência Poliglota
● É uma boa ideia usar mais de uma solução de
persistência:
– SQL onde for mais apropriado (ACID, transações,
normalização);
– NoSQL onde você não precisa das features acima;
Exemplo: E-commerce
● Catálogo de produtos é a parte mais acessada de uma
loja virtual, o volume de acessos é alto (blackfriday,
natal, dia das mães). Nem todo mundo que acessa vai
comprar naquele momento. Colocar o catálogo de
produtos no MongoDB pode destravar o e-commerce;
● Os dados dos usuários, informações financeiras e tudo
aquilo que exige transação, fica no banco relacional
(PostgreSQL por exemplo). Assim o SQL só será
acessado quando o usuário for concluir a compra.
Aproveitando melhor cada
tecnologia
● O exemplo do e-commerce mostra:
– Usa-se MongoDB para escalar bem uma parte
complicada do site, onde os usuários passam maior
parte de seu tempo navegando. Ganha-se
agilidade, flexibilidade e escalabilidade;
– Usa-se PostgreSQL somente para concluir
transações, guardar informações pessoais dos
usuários (quando está logado) e tudo que precisa
de normalização;
Ainda tem mais...
● Pode usar Neo4J (Grafos) para recomendar
produtos aos usuários, com base em suas
preferências de navegação e outros critérios
utilizados para determinar perfil de compra de
cada um.
O arquiteto de soluções dos dias de
hoje...
● Não pode ficar amarrado a uma única solução
– Precisa escolher a que funciona para cada cenário;
● Não é feio usar SQL e NoSQL ao mesmo
tempo, é feio deixar sua aplicação morrer por
não ser escalável;
● Precisa ser flexível, adicionar novas features
rapidamente (afinal, seu concorrente está em
um click de distância);
É necessário diversas ferramentas
para construir uma casa
● Assim como você precisa de chave de fenda,
alicate, pá, martelo e outras ferramentas para
construir uma casa, pode ser necessário mais
de uma solução de persistência para sua
aplicação, extraindo o melhor que cada uma
tem a oferecer.
Fica mais caro manter tudo isso?
● Claro que fica!
– Você vai precisar de mais máquina, pessoas
qualificadas, mais infra...
● Mas se você faz sua aplicação mais rápida,
estável, segura e escalável, vai vender mais...
● Lembra do quadro Bom, Rápido e Barato?
Então, faça sua escolha.
Por onde começar
● Primeiro passo é entender bem a arquitetura da
informação;
● Conhecer um pouco de cada alternativa de persistência;
● Analisar qual melhor modelo de dados para cada caso
(Documento, Chave/Valor, Colunar, Grafos);
● Implementar a(s) persistência(s) certa(s) à sua aplicação;
● Ter mais de uma é aceitável e recomendado
E o tempo acabou...
Se não deu tempo de responder sua dúvida,
Me chame no corredor ou entre em contato:
Twitter: @dump
Email: anderson@propus.com.br
OBRIGADO!!!

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Migrating from RDBMS to MongoDB
Migrating from RDBMS to MongoDBMigrating from RDBMS to MongoDB
Migrating from RDBMS to MongoDB
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
 
Aula 1
Aula 1Aula 1
Aula 1
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumo
 
NoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas MonografiaNoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas Monografia
 
Amazon Redshift의 이해와 활용 (김용우) - AWS DB Day
Amazon Redshift의 이해와 활용 (김용우) - AWS DB DayAmazon Redshift의 이해와 활용 (김용우) - AWS DB Day
Amazon Redshift의 이해와 활용 (김용우) - AWS DB Day
 
Cassandra consistency
Cassandra consistencyCassandra consistency
Cassandra consistency
 
Banco de Dados - Conceitos Básicos
Banco de Dados - Conceitos BásicosBanco de Dados - Conceitos Básicos
Banco de Dados - Conceitos Básicos
 
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. Ref
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. RefBD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. Ref
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. Ref
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
 
06 Modelagem de banco de dados: Modelo Lógico
06  Modelagem de banco de dados: Modelo Lógico06  Modelagem de banco de dados: Modelo Lógico
06 Modelagem de banco de dados: Modelo Lógico
 
Banco de Dados Conceitos
Banco de Dados ConceitosBanco de Dados Conceitos
Banco de Dados Conceitos
 
Banco de Dados - Conceitos
Banco de Dados - ConceitosBanco de Dados - Conceitos
Banco de Dados - Conceitos
 
Banco de Dados - Part01
Banco de Dados - Part01Banco de Dados - Part01
Banco de Dados - Part01
 
Banco de Dados
Banco de DadosBanco de Dados
Banco de Dados
 
Aws glue를 통한 손쉬운 데이터 전처리 작업하기
Aws glue를 통한 손쉬운 데이터 전처리 작업하기Aws glue를 통한 손쉬운 데이터 전처리 작업하기
Aws glue를 통한 손쉬운 데이터 전처리 작업하기
 
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [중고책나라] : 실시간 데이터를 이용한 Elasticsearch 클러스터 최적화
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [중고책나라] : 실시간 데이터를 이용한 Elasticsearch 클러스터 최적화제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [중고책나라] : 실시간 데이터를 이용한 Elasticsearch 클러스터 최적화
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [중고책나라] : 실시간 데이터를 이용한 Elasticsearch 클러스터 최적화
 
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...
 

Semelhante a Persistência Poliglota, Big Data e NoSQL FISL 15

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
 

Semelhante a Persistência Poliglota, Big Data e NoSQL FISL 15 (20)

Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
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
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
 
Não deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do frameworkNão deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do framework
 
DevCamp 2017 - Criando produtos de Data Science e Inteligência Artificial
DevCamp 2017 - Criando produtos de Data Science e Inteligência ArtificialDevCamp 2017 - Criando produtos de Data Science e Inteligência Artificial
DevCamp 2017 - Criando produtos de Data Science e Inteligência Artificial
 
Criando produtos de Data Science & AI: da proposta ao deploy
Criando produtos de Data Science & AI: da proposta ao deployCriando produtos de Data Science & AI: da proposta ao deploy
Criando produtos de Data Science & AI: da proposta ao deploy
 
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.
 
SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
No sql no mundo da persistencia poliglota
No sql no mundo da persistencia poliglotaNo sql no mundo da persistencia poliglota
No sql no mundo da persistencia poliglota
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência Poliglota
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
 
Scrum
ScrumScrum
Scrum
 
REST x SOAP : Qual abordagem escolher?
REST x SOAP : Qual abordagem escolher?REST x SOAP : Qual abordagem escolher?
REST x SOAP : Qual abordagem escolher?
 
Novas Fronteiras
Novas FronteirasNovas Fronteiras
Novas Fronteiras
 
Crystal method
Crystal methodCrystal method
Crystal method
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
 
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
 

Mais de Christiano Anderson

Mais de Christiano Anderson (18)

Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
certificadoTDC2016Floripa
certificadoTDC2016FloripacertificadoTDC2016Floripa
certificadoTDC2016Floripa
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
 
Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjango
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Big Data Latinoware 2014
Big Data Latinoware 2014Big Data Latinoware 2014
Big Data Latinoware 2014
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
 
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
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
GeoDjango
GeoDjangoGeoDjango
GeoDjango
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Python and MongoDB
Python and MongoDBPython and MongoDB
Python and MongoDB
 

Persistência Poliglota, Big Data e NoSQL FISL 15

  • 2. Agenda ● Quem sou eu ● A era de ouro dos bancos relacionais ● Bancos Não Relacionais ● Por que usar persistência poliglota ● Exemplos
  • 3. Quem sou eu ● Trabalha com internet/devel desde 1996; ● Colabora com diversos projetos livres; ● Fundador do MUG-SP; ● Especialista em NoSQL / Big Data; ● Blog: http://christiano.me ● Twitter: @dump ● Email: anderson@propus.com.br
  • 4. A era de ouro dos Bancos relacionais
  • 5. Bancos Relacionais ● Opções populares, como MySQL, PostgreSQL e Oracle ● Sempre foram a primeira opção ao desenvolver qualquer aplicação ● Muitas ferramentas ● Muita gente qualificada no mercado ● Suporte amplo e fácil de encontrar, inclusive do fabricante ● Acabou se tornando um “padrão”
  • 6. O modelo relacional ● Dados armazenados em tabelas; ● Relacionamentos; ● Normalização de dados; ● Necessidade de schema;
  • 7. Vantagens do modelo relacional ● SQL → Quase todo mundo conhece; – Linguagem bem flexível; – Muitos operadores, stored procedures, boas ferramentas; ● Dados bem padronizados, normalizados; – Relacionamento; – Join, group by, integridade relacional, etc
  • 8. Vantagens do modelo relacional ● ACID – Atomicidade (tudo ou nada); – Consistência (validação, respeita integridade); – Isolamento (concorrência retorna resultado válido); – Durabilidade (uma vez gravado, é definitivo)
  • 9. Desvantagens do modelo relacional ● Dependência da modelagem, qualquer alteração, precisa passar por uma migração; ● Dificuldade para manter aplicações que crescem muito rápido; ● Dificuldade na Escalabilidade – Vertical (o banco está lento, mete mais memória na máquina); – Compra uma máquina melhor;
  • 10. E quando o banco começa ficar lento?
  • 11. Contrata um cara para criar índices E de fato fica um pouco melhor, mas não resolve 100%
  • 12. Contrata um cara para criar views e queries complexas Melhora mais um pouco, só que vira um pesadelo para manter...
  • 13. Contrata um cara para criar cache na aplicação Fica ainda melhor, mas a informação começa ser duplicada
  • 15. Novo paradigma ● Na verdade, nem tão novo assim; ● Liberdade de schema e modelagem; ● Escalabilidade horizontal (fica lento, coloca mais máquina); – Pode ser máquinas comuns; ● Muito fácil e simples colocar em cluster – Muitos seguem o teorema de CAP
  • 16. Não é bala de prata ● Fazemos três tipos de serviços: – Bom, Barato, Rápido ● Se for BOM e BARATO não vai ser RÁPIDO ● Se for BARATO e RÁPIDO não vai ser BOM ● Se for BOM e RÁPIDO não vai ser BARATO
  • 17. Escolha bem os recursos que precisa Abra mão de outros
  • 19. Teorema de CAP Consistency (Todos os nós possuem o mesmo dado ao mesmo tempo); Availability (Garantia que todas as requisições recebam um retorno true ou false) Partition tolerance (o sistema continua operando mesmo se parte do nó estive inacessível)
  • 20. De acordo com o teorema, sistemas distribuídos não podem atender aos três requisitos ao mesmo tempo, atendem um ou dois.
  • 21. Desnormalizar ● NoSQL não trabalha de forma normalizada – Duplicidade? – Falta de Consistência? ● Isso pode ser bom ou ruim dependendo da sua aplicação
  • 22. Aprender novo modelo de fazer consultas ao banco ● Muitos NoSQL não trabalham com conceito de queries, mas utilizam filtros; – Você precisa estar preparado para integrar novas formas de acesso a dados na sua aplicação – Possui curva de aprendizado (tênue, mas possui)
  • 23. Esqueça SQL e modelagem ● Aprenda como o NoSQL funciona, nunca, mas nunca pense da mesma forma que no relacional; – O segredo do sucesso chama-se Schema Design
  • 24. Deixe de lado ORMs tradicionais ● ORM tradicionais (como SQLAlchemy) não funcionam com NoSQL e nem vão funcionar; ● Estude bem o driver apropriado da sua linguagem de programação favorita, provavelmente terá suporte ao NoSQL que você escolher.
  • 25. SQL vs NoSQL SQL NoSQL Uma única máquina Um Cluster Escala verticalmente Escala horizontalmente Full Index Baseado em chaves SQL Possui API e filtros de pesquisa
  • 26. Identifique qual NoSQL mais apropriado para sua aplicação ● Orientação a Documento; ● Chave/Valor; ● Grafos; ● Colunar;
  • 27. Qual a melhor ferramenta?
  • 29. Exemplo de documento { “_id”: ObjectId("53582acf31f36c9a248e4c15"), “nome”: “Christiano Anderson”, “contato”: { “email”: “chris@christiano.me”, “celular”: “11999998888”, }, “sites”: { “blog”: “http://christiano.me”, “mongodb”: “http://www.mongodb.org” }, “tecnologias”: [“mongodb”,”python”,”big data”,”nosql”] }
  • 33. Persistência Poliglota ● Uma aplicação eficiente é aquela que atende bem seu objetivo e está sempre disponível quando é requisitada; – Escalável – Segura – Nunca é o gargalo para inovações
  • 34. Persistência Poliglota ● É uma boa ideia usar mais de uma solução de persistência: – SQL onde for mais apropriado (ACID, transações, normalização); – NoSQL onde você não precisa das features acima;
  • 35. Exemplo: E-commerce ● Catálogo de produtos é a parte mais acessada de uma loja virtual, o volume de acessos é alto (blackfriday, natal, dia das mães). Nem todo mundo que acessa vai comprar naquele momento. Colocar o catálogo de produtos no MongoDB pode destravar o e-commerce; ● Os dados dos usuários, informações financeiras e tudo aquilo que exige transação, fica no banco relacional (PostgreSQL por exemplo). Assim o SQL só será acessado quando o usuário for concluir a compra.
  • 36. Aproveitando melhor cada tecnologia ● O exemplo do e-commerce mostra: – Usa-se MongoDB para escalar bem uma parte complicada do site, onde os usuários passam maior parte de seu tempo navegando. Ganha-se agilidade, flexibilidade e escalabilidade; – Usa-se PostgreSQL somente para concluir transações, guardar informações pessoais dos usuários (quando está logado) e tudo que precisa de normalização;
  • 37. Ainda tem mais... ● Pode usar Neo4J (Grafos) para recomendar produtos aos usuários, com base em suas preferências de navegação e outros critérios utilizados para determinar perfil de compra de cada um.
  • 38. O arquiteto de soluções dos dias de hoje... ● Não pode ficar amarrado a uma única solução – Precisa escolher a que funciona para cada cenário; ● Não é feio usar SQL e NoSQL ao mesmo tempo, é feio deixar sua aplicação morrer por não ser escalável; ● Precisa ser flexível, adicionar novas features rapidamente (afinal, seu concorrente está em um click de distância);
  • 39. É necessário diversas ferramentas para construir uma casa ● Assim como você precisa de chave de fenda, alicate, pá, martelo e outras ferramentas para construir uma casa, pode ser necessário mais de uma solução de persistência para sua aplicação, extraindo o melhor que cada uma tem a oferecer.
  • 40. Fica mais caro manter tudo isso? ● Claro que fica! – Você vai precisar de mais máquina, pessoas qualificadas, mais infra... ● Mas se você faz sua aplicação mais rápida, estável, segura e escalável, vai vender mais... ● Lembra do quadro Bom, Rápido e Barato? Então, faça sua escolha.
  • 41. Por onde começar ● Primeiro passo é entender bem a arquitetura da informação; ● Conhecer um pouco de cada alternativa de persistência; ● Analisar qual melhor modelo de dados para cada caso (Documento, Chave/Valor, Colunar, Grafos); ● Implementar a(s) persistência(s) certa(s) à sua aplicação; ● Ter mais de uma é aceitável e recomendado
  • 42. E o tempo acabou... Se não deu tempo de responder sua dúvida, Me chame no corredor ou entre em contato: Twitter: @dump Email: anderson@propus.com.br OBRIGADO!!!