MongoDB – Dicas – App – Defina a escrita apropriada

1.7 App, utilize os drivers atuais!

Web App Saga!

No Mongo existem questionamentos sobre a qualidade da persistência de dados comparado aos bancos relacionais. Mas, testes comprovaram que falhas de ACID normalmente são originadas por codificação ruim, e não pela base de dados.

write concerns

Isso porque ao contrário das bases relacionais que por natureza tem escrita bloqueante (podendo ser desabilitada manualmente via NOLOCKs). No Mongo podemos definir o nível de garantia de persistência write concerns.

Essas configurações podem ser definidas a nível de:

  • base
  • conexão
  • coleção
  • granularidade fina: a cada operação

Mais poderes, Grandes responsabilidades

É tarefa do arquiteto determinar o write concern correto.

A norma padrão garante apenas performance genérica de escrita, mas que pode não atender ao nosso cenário, considerando a concorrência de r/w da base.

mongo_dicas_writeconcern

Opções de write concerns:

Write Acknowledged (padrão e mais veloz)

O mongod confirma a execução da operação de write dos dados in-memory, permitindo ao cliente detectar erros na operação como chaves duplicadas, falhas de comunicação, etc.

Journal Acknowledged (segura e lenta)

O mongod confirma a operação apenas após o seu registro no log com sucesso. Isto permite a sobrevivência a uma queda do serviço, garantindo maior durabilidade.

Replica Acknowledged (apenas para replica sets)

O mongod confirma se o dado não apenas foi escrito no log da réplica primary como nas demais réplicas (configurável quantidade de réplicas para confirmação).

Majority (para cenários com replica sets)

Define a maioria das réplicas também devem confirmar que realizaram a escrita dos dados e dos logs, sempre incluindo a réplica primary.

Data Center Awareness: (opção mais avançada)

Permite customizar a garantia de escrita em ambientes multi-server.

Configuração a nível de operação

Podemos passar um segundo parâmetro para a função de escrita (insert, aqui).

Este segundo parâmetro informa um obj com o tipo de write concern (w:1 padrão) e se deve aguardar pela persistência nos logs ou não (j:true).

db.collection.insert({data}, {w:1, j:true})

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

Next stop MongoDB. Disembark on the left.

Keep Programming!

Leave a Reply

Your email address will not be published. Required fields are marked *