O documento descreve o uso de MongoDB na empresa Sailthru para armazenar perfis de usuários, estatísticas de email e dados de navegação. A Sailthru migrou com sucesso de MySQL para MongoDB há dois anos e usa vários bancos de dados e replicasets para diferentes propósitos. O documento fornece dicas sobre como configurar e usar MongoDB em produção.
5. Sailthru tamanho
● 200 milhões perfis de usuário
● 40 milhões emails enviados por dia
● 1000 requests por segundo
● 8 replica sets, 40 nós
● Bilhões de documentos
6. Arquitetura da Sailthru
● Serviços críticos: API, link rewriting, onsite
tracking/recommendations, email delivery,
reporting/user interface
● Amazon EC2 e Colo(Peer1)
● Java, LAMP, Puppet, Scribe, ActiveMQ
7. MongoDB na Sailthru
● 2 anos de uso
● Replicaset diferentes para propósitos
diferentes
● Coleções lógicas separadas no aplicativo
● Dados naturalmente particionados por
cliente
8.
9. Main Database
● Banco de dados central
● Estatísticas agregadas
● Uso geral reduzido
● Instancias menores
● Coleções que não precisam escalar
● Provavelmente nunca precisará de Sharding
10. Email Database
● Todos emails já enviados
● Uma das maiores coleções (meio bilhão
documentos)
● Muitas escritas
● Coleções que não precisam escalar
● Provavelmente será a primeira coisa a usar
Sharding
11. Horizon Database
● Dados de navegação para uso local
● Coleção pequena porém com muita leitura,
poderá ser colocada em cache
● Escritas aumentarão
● Logicamente separada
12. Profile Database
● Perfis dos usuários (cerca de 30 milhões)
● Separado pois o acesso é mais aleatório e
necessita de um conjunto de dados
● Grandes consultas devem acontecer apenas
nos escravos
13. Migração do MySQL para MongoDB
● JSON é lingua franca
● Migrando uma tabela por vez e rodando os 2
ao mesmo tempo
● Mudança no código para escrever nos 2
● Escrita e execução de script para "reaterrar"
dados antigos
● Remoção do código que escreve para
MySQL
14. Vantagens com MongoDB
● Desenvolvimento rápido
● Fácil armazenamento dos dados do cliente
como JSON flexível
● Ótima performance
● Encoraja a escalabilidade
● Eles conhecem muito bem
15. Lições Aprendidas
● DBRefs são um pouco pesadas
● Use referencias legíveis
● Índice para todas queries mais usadas
● Tire vantagem de múltiplos índices
16. Dicas
● Documentos devem ser movidos quando
ultrapassarem o tamanho esperado
● Caso possua campos que serão
preenchidos posteriormente, ja popule com
vazio.
● Autoinc pode ser emulado com
findAndModify
● Cuidado com moedas, guarde em centavos
● Data BSON é bom para timestamp
● Considere antes de usar um Mapper
● Use GridFS para arquivos pouco acessados
17. mongod
● Nunca finalize com kill -9
● Nunca rode sem replicaset
● Nunca rode sem log
● Use journaling