Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Atomicidade e Transações

Nesta página

  • Atomicidade
  • transações multidocumento
  • Controle de Simultaneidade

No MongoDB, uma operação de gravação é atômica no nível de um único documento, mesmo que a operação modifique vários documentos incorporados dentro de um único documento.

Quando uma única operação de gravação (por exemplo, db.collection.updateMany()) modifica vários documentos, a modificação de cada documento é atômica, mas a operação como um todo não é atômica.

Ao realizar operações de escrita de vários documentos, seja por meio de uma única operação de escrita ou de várias operações de escrita, outras operações podem ser intercaladas.

Para situações que exigem atomicidade de leituras e escritos em vários documentos (em uma única coleção ou várias coleções), o MongoDB suporta transações distribuídas, incluindo transações em conjuntos de réplicas e clusters fragmentados.

Para obter mais informações, consulte transações

Importante

Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.

Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.

O controle de simultaneidade permite que vários aplicativos sejam executados simultaneamente sem causar inconsistência de dados ou conflitos.

Uma operação do findAndModify em um documento é atômica: se a condição de localização corresponder a um documento, a atualização será executada nesse documento. Queries simultâneas e atualizações adicionais nesse documento não serão afetadas até que a atualização atual seja concluída.

Considere o seguinte exemplo:

  • Uma collection com dois documentos:

    db.myCollection.insertMany( [
    { _id: 0, a: 1, b: 1 },
    { _id: 1, a: 1, b: 1 }
    ] )
  • Duas das seguintes operações do findAndModify são executadas simultaneamente:

    db.myCollection.findAndModify( {
    query: { a: 1 },
    update: { $inc: { b: 1 }, $set: { a: 2 } }
    } )

Depois que as operações findAndModify forem concluídas, é garantido que a e b em ambos os documentos estejam definidos como 2.

Dica

Veja também:

Você também pode criar um índice único em um campo para que ele possa ter somente valores únicos. Isso impede que inserções e atualizações criem dados duplicados. Você pode criar um índice único em múltiplos campos para garantir que a combinação de valores de campo seja única. Por exemplo, consulte findAndModify() Upsert com índice exclusivo.

← Conceitos de CRUD do MongoDB