Krótka odpowiedź brzmi tak dla atomowości.
W MongoDB Transakcje (nazywane również transakcjami obejmującymi wiele dokumentów) są powiązane z sesją . Oznacza to, że rozpoczynasz transakcję dla sesji. W dowolnym momencie możesz mieć najwyżej jeden otwórz transakcję dla sesji.
Nie możesz zablokować całej kolekcji do zapisu. Możesz chcieć utworzyć wiele transakcji, aby upewnić się, że zapisy nie przeplatają się/zastępują między procesami. MongoDB używa Blokowania optymistycznego zamiast pesymistyczne blokowanie .
Podobnie w transakcjach wielodokumentowych MongoDB. Na przykład przy użyciu 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.
Należy również pamiętać, że gdy transakcja jest otwarta, żadne zmiany danych dokonane przez operacje w transakcji nie są widoczne poza transakcją.
- Kiedy transakcja zostanie zatwierdzona, wszystkie zmiany danych są zapisywane i widoczne poza transakcją, a transakcja się kończy.
- Kiedy transakcja zostaje przerwana, wszystkie zmiany danych dokonane przez zapisy w transakcji są odrzucane, nigdy nie stając się widoczne, a transakcja się kończy.
Zobacz też Przykład atomowości .
Warto zauważyć, że MongoDB jest dystrybuowaną bazą danych , więc musisz również mieć świadomość różnych opcji zachowania spójności. Możesz określić te opcje podczas inicjowania Session.startTransaction() w zależności od przypadku użycia :
-
Izolacja odczytu (problem odczytu) :Transakcje wielodokumentowe MongoDB obsługują problem odczytu „migawka ”, „lokalny ” i „większość ".
Transakcje obejmujące wiele dokumentów obsługują preferencje odczytu podstawowy a wszystkie operacje w danej transakcji muszą być kierowane do tego samego członka.
Być może zainteresuje Cię także Kreda i rozmowy inżynieryjne:transakcje MongoDB filmy, które zawierają pewne techniczne wyjaśnienia dotyczące transakcji MongoDB.