MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Transakcje MongoDB 4.0:ACID odczyt + zapis?

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 :

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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zainicjować kolekcję w Dockerized Mongo DB

  2. MongoDB 4.2 Zarządzanie i monitorowanie bez blokady dostawcy

  3. MongoDB:aktualizacja słownika w dokumencie

  4. Migracja z MongoDB do HBase

  5. Jak zaprojektować zaktualizowane wartości tylko za pomocą findOneAndUpdate we wbudowanej tablicy Mongoose?