SlideShare uma empresa Scribd logo
1 de 17
Migrando uma aplicação de 
MongoDB para PostgreSQL
Quem sou eu 
• Marcio Trindade (@marciotrindade); 
• Formado em Ed. Física; 
• Trabalho com desenvolvimento desde 2004; 
• Blog: marciotrindade.com; 
• Trabalho com Ruby desde 2008;
Onde trabalho 
Faço parte do time do Email Marketing
Por que o MongoDB 
• Velocidade de escrita; 
• Sem schema; 
• Relacionamentos; 
• Não tem migrações; 
• MongoId é simples;
Como era o projeto 
• MongoDB 2.2.3 com Mongoid 3.1.4; 
• Replicaset; 
• Sem sharding; 
• Ruby on Rails 3.2.13; 
• 4 apps e uma Rails Engine; 
• Resque, Sidekiq + Resque-scheduler;
Balancer 
web web 
Balancer 
optin optin 
worker worker bouncer bouncer 
mongo
O banco cresceu 
db.stats(1024*1024*1024) 
"collections" : 40, 
"objects" : 911.894.350, 
"storageSize" : 433G, 
"indexes" : 80, 
"indexSize" : 131G
Dificuldades 
• Manutenção; 
• Integridade comprometida; 
• Safe mode; 
• Mongoimport; 
• Índice na memória; 
• Sem sharding;
Por que o PostgreSql 
• Time especializado; 
• Foreign key; 
• Comando Copy; 
• Multi-schema; 
• Gems pra multi-schema;
Migrar os clientes 
• Soluções prontas; 
• Ser trivial para os clientes; 
• Rollback precisa ser simples; 
• Muito tempo pra migrar todos clientes; 
• Mais de 900 milhões de documentos; 
• Ter 2 app rodando juntas;
Manter as 2 aplicações 
• Router no NGINX; 
• APIs para identificar os clientes; 
• Condições nos serviços de instalações; 
• Novo painel de suporte; 
• Novos clientes na nova estrutura;
Balancer 
NGINX 1 NGINX 2 
pg web 1 mongo web 1 pg web 2 mongo web 2
Migrando os clientes 
• Aplicação em Ruby com Sidekiq; 
• Lê do MongoDB e escreve no PostgreSql; 
• MongoId, Moped, ActiveRecord; 
• Redis e Sidekiq;
Lições aprendidas 
• Routers no Nginx para outras tarefas; 
• Dividir a aplicação; 
• Utilização de multi-schema; 
• Banco relacional é rápido;
Perguntas 
Obrigado 
@marciotrindade

Mais conteúdo relacionado

Mais procurados

Conhecendo o mongodb e clusterização de dados - ReplicaSet
Conhecendo o mongodb e clusterização de dados - ReplicaSetConhecendo o mongodb e clusterização de dados - ReplicaSet
Conhecendo o mongodb e clusterização de dados - ReplicaSetJhonathan de Souza Soares
 
Curso de Node.js e MongoDB - 04
Curso de Node.js e MongoDB - 04Curso de Node.js e MongoDB - 04
Curso de Node.js e MongoDB - 04Luiz Duarte
 
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Rodrigo Peleias
 
Curso de Node.js e MongoDB - 01
Curso de Node.js e MongoDB - 01Curso de Node.js e MongoDB - 01
Curso de Node.js e MongoDB - 01Luiz Duarte
 
SQL Server 2016 e 2017 para Desenvolvedores - Grupo Bandeirantes - Janeiro-2018
SQL Server 2016 e 2017 para Desenvolvedores - Grupo Bandeirantes - Janeiro-2018SQL Server 2016 e 2017 para Desenvolvedores - Grupo Bandeirantes - Janeiro-2018
SQL Server 2016 e 2017 para Desenvolvedores - Grupo Bandeirantes - Janeiro-2018Renato Groff
 
Apresentacao zabbix
Apresentacao zabbixApresentacao zabbix
Apresentacao zabbixDaniel Peres
 
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 Fernando Rizzato
 
Node js - O poder do JavaScript do lado do servidor
Node js  - O poder do JavaScript do lado do servidorNode js  - O poder do JavaScript do lado do servidor
Node js - O poder do JavaScript do lado do servidorRomulo Fagundes
 
PostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesPostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesjoanio trade
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Pablo Souza
 
TDC2016POA | Trilha Web - Agile Security
TDC2016POA | Trilha Web - Agile SecurityTDC2016POA | Trilha Web - Agile Security
TDC2016POA | Trilha Web - Agile Securitytdc-globalcode
 

Mais procurados (19)

Conhecendo mundo Node.js
Conhecendo mundo Node.jsConhecendo mundo Node.js
Conhecendo mundo Node.js
 
PIWIK
PIWIKPIWIK
PIWIK
 
Conhecendo o mongodb e clusterização de dados - ReplicaSet
Conhecendo o mongodb e clusterização de dados - ReplicaSetConhecendo o mongodb e clusterização de dados - ReplicaSet
Conhecendo o mongodb e clusterização de dados - ReplicaSet
 
Orb - Chat by location
Orb - Chat by locationOrb - Chat by location
Orb - Chat by location
 
Curso de Node.js e MongoDB - 04
Curso de Node.js e MongoDB - 04Curso de Node.js e MongoDB - 04
Curso de Node.js e MongoDB - 04
 
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
 
Curso de Node.js e MongoDB - 01
Curso de Node.js e MongoDB - 01Curso de Node.js e MongoDB - 01
Curso de Node.js e MongoDB - 01
 
SQL Server 2016 e 2017 para Desenvolvedores - Grupo Bandeirantes - Janeiro-2018
SQL Server 2016 e 2017 para Desenvolvedores - Grupo Bandeirantes - Janeiro-2018SQL Server 2016 e 2017 para Desenvolvedores - Grupo Bandeirantes - Janeiro-2018
SQL Server 2016 e 2017 para Desenvolvedores - Grupo Bandeirantes - Janeiro-2018
 
Apresentacao zabbix
Apresentacao zabbixApresentacao zabbix
Apresentacao zabbix
 
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
 
Javascript nos dias de hoje
Javascript nos dias de hojeJavascript nos dias de hoje
Javascript nos dias de hoje
 
Node js - O poder do JavaScript do lado do servidor
Node js  - O poder do JavaScript do lado do servidorNode js  - O poder do JavaScript do lado do servidor
Node js - O poder do JavaScript do lado do servidor
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
PostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesPostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandes
 
Por que Node JS?
Por que Node JS?Por que Node JS?
Por que Node JS?
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
 
Node.js
Node.jsNode.js
Node.js
 
TDC2016POA | Trilha Web - Agile Security
TDC2016POA | Trilha Web - Agile SecurityTDC2016POA | Trilha Web - Agile Security
TDC2016POA | Trilha Web - Agile Security
 
JavaScript Moderno
JavaScript ModernoJavaScript Moderno
JavaScript Moderno
 

Destaque

DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...Bruno Luiz Pereira da Silva
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeRoberto Hashioka
 
Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerLuís Bianchin
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoTobias Sette
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoDiogo Lucas
 

Destaque (8)

Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e Compose
 
Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre Docker
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de uso
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolso
 

Semelhante a Ruby conf br

BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIAlvaro Viebrantz
 
Mongo db no mundo real slides
Mongo db no mundo real   slidesMongo db no mundo real   slides
Mongo db no mundo real slidesSuissa
 
DevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesDevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesSuissa
 
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 MongoDBJhonathan de Souza Soares
 
Desenvolvimento Ágil com Ruby on Rails
Desenvolvimento Ágil com Ruby on RailsDesenvolvimento Ágil com Ruby on Rails
Desenvolvimento Ágil com Ruby on RailsRogerio Chaves
 
Apresentação MongoDB
Apresentação MongoDBApresentação MongoDB
Apresentação MongoDBDavid de Lucca
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edtedbrunoaalves
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreRodrigo Kono
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDenis Vieira
 
Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Ariovaldo Carmona
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
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 ...tdc-globalcode
 
Bancos NoSQL no Microsoft Azure
Bancos NoSQL no Microsoft AzureBancos NoSQL no Microsoft Azure
Bancos NoSQL no Microsoft AzureJoel Rodrigues
 

Semelhante a Ruby conf br (20)

BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
 
Loucos fc
Loucos fcLoucos fc
Loucos fc
 
Mongo db no mundo real slides
Mongo db no mundo real   slidesMongo db no mundo real   slides
Mongo db no mundo real slides
 
DevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesDevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slides
 
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
 
Desenvolvimento Ágil com Ruby on Rails
Desenvolvimento Ágil com Ruby on RailsDesenvolvimento Ágil com Ruby on Rails
Desenvolvimento Ágil com Ruby on Rails
 
Apresentação MongoDB
Apresentação MongoDBApresentação MongoDB
Apresentação MongoDB
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edted
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full Javascript
 
Api todo list
Api todo listApi todo list
Api todo list
 
Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
Netbeans slides
Netbeans slidesNetbeans slides
Netbeans slides
 
Spring data
Spring dataSpring data
Spring data
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
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 ...
 
Bancos NoSQL no Microsoft Azure
Bancos NoSQL no Microsoft AzureBancos NoSQL no Microsoft Azure
Bancos NoSQL no Microsoft Azure
 
Introdução ao AngularJS!
Introdução ao AngularJS!Introdução ao AngularJS!
Introdução ao AngularJS!
 

Ruby conf br

  • 1. Migrando uma aplicação de MongoDB para PostgreSQL
  • 2. Quem sou eu • Marcio Trindade (@marciotrindade); • Formado em Ed. Física; • Trabalho com desenvolvimento desde 2004; • Blog: marciotrindade.com; • Trabalho com Ruby desde 2008;
  • 3. Onde trabalho Faço parte do time do Email Marketing
  • 4. Por que o MongoDB • Velocidade de escrita; • Sem schema; • Relacionamentos; • Não tem migrações; • MongoId é simples;
  • 5. Como era o projeto • MongoDB 2.2.3 com Mongoid 3.1.4; • Replicaset; • Sem sharding; • Ruby on Rails 3.2.13; • 4 apps e uma Rails Engine; • Resque, Sidekiq + Resque-scheduler;
  • 6. Balancer web web Balancer optin optin worker worker bouncer bouncer mongo
  • 7. O banco cresceu db.stats(1024*1024*1024) "collections" : 40, "objects" : 911.894.350, "storageSize" : 433G, "indexes" : 80, "indexSize" : 131G
  • 8. Dificuldades • Manutenção; • Integridade comprometida; • Safe mode; • Mongoimport; • Índice na memória; • Sem sharding;
  • 9. Por que o PostgreSql • Time especializado; • Foreign key; • Comando Copy; • Multi-schema; • Gems pra multi-schema;
  • 10. Migrar os clientes • Soluções prontas; • Ser trivial para os clientes; • Rollback precisa ser simples; • Muito tempo pra migrar todos clientes; • Mais de 900 milhões de documentos; • Ter 2 app rodando juntas;
  • 11. Manter as 2 aplicações • Router no NGINX; • APIs para identificar os clientes; • Condições nos serviços de instalações; • Novo painel de suporte; • Novos clientes na nova estrutura;
  • 12.
  • 13. Balancer NGINX 1 NGINX 2 pg web 1 mongo web 1 pg web 2 mongo web 2
  • 14. Migrando os clientes • Aplicação em Ruby com Sidekiq; • Lê do MongoDB e escreve no PostgreSql; • MongoId, Moped, ActiveRecord; • Redis e Sidekiq;
  • 15.
  • 16. Lições aprendidas • Routers no Nginx para outras tarefas; • Dividir a aplicação; • Utilização de multi-schema; • Banco relacional é rápido;