Краткият отговор е да за атомарността.
В MongoDB, Транзакции (наричани още транзакции с множество документи) са свързани с сесия . Тоест започвате транзакция за сесия. Във всеки един момент можете да имате най-много един отворена транзакция за сесия.
Не можете да заключите цялата колекция за писане. Може да искате да създадете множество транзакции, за да сте сигурни, че записите не се преплитат/заменят между вашите процеси. MongoDB използва Оптимистично заключване вместо Песимистично заключване .
По подобен начин в транзакциите с множество документи на MongoDB. Например, като използвате 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.
Също така имайте предвид, че докато транзакцията е отворена, никакви промени в данните, направени от операции в транзакцията, не се виждат извън транзакцията.
- Когато транзакция се ангажира, всички промени в данните се запазват и се виждат извън транзакцията и транзакцията приключва.
- Когато дадена транзакция бъде прекъсната, всички промени в данните, направени от записите в транзакцията, се отхвърлят, без изобщо да станат видими, и транзакцията приключва.
Вижте също Пример за атомарност .
Струва си да се отбележи, че MongoDB е разпределена база данни , така че трябва да сте наясно и с различните варианти за последователност. Можете да посочите тези опции, когато инициирате Session.startTransaction() в зависимост от случая на употреба:
-
Изолация при четене (загриженост при четене) :MongoDB транзакции с множество документи поддържат проблем при четене "моментна снимка ", "локален “ и „мнозинство ".
Транзакциите с множество документи поддържат предпочитание за четене основно и всички операции в дадена транзакция трябва да насочват към един и същ член.
Може също да се интересувате от Инженерна креда и разговори:MongoDB транзакции видеоклипове, които съдържат някои технически обяснения зад транзакциите на MongoDB.