MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Transações do MongoDB 4.0:ACID leitura + gravação?


A resposta curta é sim para atomicidade.

No MongoDB, Transações (também chamadas de transações de vários documentos) estão associadas a uma sessão . Ou seja, você inicia uma transação para uma sessão. A qualquer momento, você pode ter no máximo um transação aberta para uma sessão.

Você não pode bloquear a coleção inteira para gravações. Você pode querer criar várias transações para garantir que as gravações não sejam entrelaçadas/substituídas entre seus processos. MongoDB usa Bloqueio Otimista em vez de Bloqueio Pessimista .

Da mesma forma nas transações de vários documentos do MongoDB. Por exemplo, usando mongo shell :
s1 = Mongo().startSession() 
sessionTest = s1.getDatabase("databaseName").test;
s1.startTransaction() 
sessionTest.find({a:"foo"})
> {_id: ObjectId(..), a:"foo", b:1}

// Let's update the record outside of the session (i.e. another process)
db.test.update({a:"foo"}, {$set:{b:2}})

sessionTest.update({a:"foo"}, {$set:{b:9}})
// You'll get a WriteConflict error because the the document has been modified outside of the session. 

Observe também que, enquanto a transação está aberta, nenhuma alteração de dados feita por operações na transação é visível fora da transação.
  • Quando uma transação é confirmada, todas as alterações de dados são salvas e visíveis fora da transação e a transação termina.
  • Quando uma transação é abortada, todas as alterações de dados feitas pelas gravações na transação são descartadas sem nunca se tornarem visíveis e a transação termina.

Consulte também Exemplo de atomicidade .

Vale a pena notar que o MongoDB é um banco de dados distribuído , portanto, você também precisa estar ciente das diferentes opções de consistência. Você pode especificar essas opções ao iniciar Session.startTransaction() dependendo do caso de uso:

As transações de vários documentos suportam a preferência de leitura primário e todas as operações em uma determinada transação devem ser roteadas para o mesmo membro.

Você também pode estar interessado em Engineering Chalk and Talks:MongoDB Transactions vídeos que contêm algumas explicações técnicas por trás das transações do MongoDB.