Ruby conf br

Post on 26-Jan-2015

208 views 2 download

description

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

Transcript of Ruby conf br

Migrando uma aplicação de MongoDB para PostgreSQL

• Marcio Trindade (@marciotrindade);

• Formado em Ed. Física;

• Trabalho com desenvolvimento desde 2004;

• Blog: marciotrindade.com;

• Trabalho com Ruby desde 2008;

Quem sou eu

Faço parte do time do Email Marketing

Onde trabalho

• Velocidade de escrita;

• Sem schema;

• Relacionamentos;

• Não tem migrações;

• MongoId é simples;

Por que o MongoDB

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

Como era o projeto

webweb

Balancer

optinoptin

Balancer

mongoworkerworker bouncer bouncer

db.stats(1024*1024*1024)

"collections" : 40,

"objects" : 911.894.350,

"storageSize" : 433G,

"indexes" : 80,

"indexSize" : 131G

O banco cresceu

• Manutenção;

• Integridade comprometida;

• Safe mode;

• Mongoimport;

• Índice na memória;

• Sem sharding;

Dificuldades

• Time especializado;

• Foreign key;

• Comando Copy;

• Multi-schema;

• Gems pra multi-schema;

Por que o PostgreSql

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

Migrar os clientes

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

Manter as 2 aplicações

NGINX 2NGINX 1

Balancer

pg web 1 pg web 2mongo web 1 mongo web 2

• Aplicação em Ruby com Sidekiq;

• Lê do MongoDB e escreve no PostgreSql;

• MongoId, Moped, ActiveRecord;

• Redis e Sidekiq;

Migrando os clientes

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