ruby conf br

17
Migrando uma aplicação de MongoDB para PostgreSQL

Upload: marcio-trindade

Post on 26-Jan-2015

208 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Ruby conf br

Migrando uma aplicação de MongoDB para PostgreSQL

Page 2: Ruby conf br

• Marcio Trindade (@marciotrindade);

• Formado em Ed. Física;

• Trabalho com desenvolvimento desde 2004;

• Blog: marciotrindade.com;

• Trabalho com Ruby desde 2008;

Quem sou eu

Page 3: Ruby conf br

Faço parte do time do Email Marketing

Onde trabalho

Page 4: Ruby conf br

• Velocidade de escrita;

• Sem schema;

• Relacionamentos;

• Não tem migrações;

• MongoId é simples;

Por que o MongoDB

Page 5: Ruby conf br

• 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

Page 6: Ruby conf br

webweb

Balancer

optinoptin

Balancer

mongoworkerworker bouncer bouncer

Page 7: Ruby conf br

db.stats(1024*1024*1024)

"collections" : 40,

"objects" : 911.894.350,

"storageSize" : 433G,

"indexes" : 80,

"indexSize" : 131G

O banco cresceu

Page 8: Ruby conf br

• Manutenção;

• Integridade comprometida;

• Safe mode;

• Mongoimport;

• Índice na memória;

• Sem sharding;

Dificuldades

Page 9: Ruby conf br

• Time especializado;

• Foreign key;

• Comando Copy;

• Multi-schema;

• Gems pra multi-schema;

Por que o PostgreSql

Page 10: Ruby conf br

• 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

Page 11: Ruby conf br

• 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

Page 12: Ruby conf br
Page 13: Ruby conf br

NGINX 2NGINX 1

Balancer

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

Page 14: Ruby conf br

• Aplicação em Ruby com Sidekiq;

• Lê do MongoDB e escreve no PostgreSql;

• MongoId, Moped, ActiveRecord;

• Redis e Sidekiq;

Migrando os clientes

Page 15: Ruby conf br
Page 16: Ruby conf br

Lições aprendidas

• Routers no Nginx para outras tarefas;

• Dividir a aplicação;

• Utilização de multi-schema;

• Banco relacional é rápido;

Page 17: Ruby conf br

Perguntas

Obrigado

@marciotrindade