Category Archives: MongoDB

MongoDB – Dicas – Hard – Ram suficiente

1.1 Hardware, tenha memória RAM suficiente!

Web App Saga!

A quantidade de RAM é o maior pré-requisito quando o assunto é hardware.

Ou seja, assim como a maioria das bases, o MongoDB trabalha melhor quando suas coleções/índices mais utilizados cabem completamente na memória RAM do servidor.

Use a função stats para analisar o uso de RAM por componente.

db.customers.stats()

{

“size” : 715578011834,  // total size (bytes)

“avgObjSize” : 2862,    // average size (bytes)

}

O exemplo exibe stats da coleção customers.

mongo_dicas_stats

Para um análise mais geral, o db.serverStatus() retorna uma estimativa do tamanho do working set atual (dados mais usados).

O resultado que temos com outras otimizações não é comparado com a melhoria de performance que ter RAM suficiente proporciona ao sistema. Caso o working set exceda a capacidade de memória de um único servidor uma dica é fazer sharding dele em vários servers.

Modelar a base pensando nas consultas nos facilitará muito.

Para mais detalhes consulte a documentação oficial do MongoDB.

Next stop MongoDB. Disembark on the left.

Keep Programming!

MongoDB – Dicas – App – Atualize somente campos alterados

1.8 App, Update somente nos campos que sofreram alterações!

Web App Saga!

O cmd update por padrão recebe o doc JSON, ele substituirá o atual com o mesmo _id usado como filtro. No entanto, substituição de docs inteiros podem onerar um overhead desnecessário na base.

mongo_dicas_update

A boa prática é aplicar operadores de update para alterar APENAS campos que sofreram mudanças. Ou seja, se apenas o endereço do cliente sofreu edição, mande apenas essa alteração ao db, resultando em diminuição de tempo com update e consumo da rede.

Como o ACID do MongoDB é garantido apenas a nível de doc, uma base com alta concorrência pode falhar no update caso opte apenas pelo $set (cmd mais simples).

Para campos numéricos que sofrem alterações, $inc e $mul são opções, pois operam sobre o valor atual do campo, sem a necessidade de conhecê-lo com antecedência, o que poderia causar inconsistências caso o update de outro usuário seja mais veloz no mesmo campo.

Modelar a base pensando nas consultas nos facilitará muito.

Para mais detalhes consulte a documentação oficial do MongoDB.

Next stop MongoDB. Disembark on the left.

Keep Programming!