Ruby conf br

555 visualizações

Publicada em

Apresentação na Ruby Conf BR dia 28/08/2014

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
555
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Ruby conf br

  1. 1. Migrando uma aplicação de MongoDB para PostgreSQL
  2. 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. 3. Onde trabalho Faço parte do time do Email Marketing
  4. 4. Por que o MongoDB • Velocidade de escrita; • Sem schema; • Relacionamentos; • Não tem migrações; • MongoId é simples;
  5. 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. 6. Balancer web web Balancer optin optin worker worker bouncer bouncer mongo
  7. 7. O banco cresceu db.stats(1024*1024*1024) "collections" : 40, "objects" : 911.894.350, "storageSize" : 433G, "indexes" : 80, "indexSize" : 131G
  8. 8. Dificuldades • Manutenção; • Integridade comprometida; • Safe mode; • Mongoimport; • Índice na memória; • Sem sharding;
  9. 9. Por que o PostgreSql • Time especializado; • Foreign key; • Comando Copy; • Multi-schema; • Gems pra multi-schema;
  10. 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. 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. 12. Balancer NGINX 1 NGINX 2 pg web 1 mongo web 1 pg web 2 mongo web 2
  13. 13. Migrando os clientes • Aplicação em Ruby com Sidekiq; • Lê do MongoDB e escreve no PostgreSql; • MongoId, Moped, ActiveRecord; • Redis e Sidekiq;
  14. 14. Lições aprendidas • Routers no Nginx para outras tarefas; • Dividir a aplicação; • Utilização de multi-schema; • Banco relacional é rápido;
  15. 15. Perguntas Obrigado @marciotrindade

×