MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB 4.0 транзакции:ACID четене + запис?

Краткият отговор е да за атомарността.

В 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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ограничете размера на множество MongoDB масиви

  2. Грешка при изпълнение на mongo изображение - docker-entrypoint.sh:ред 381

  3. Spring data mongodb премахва свойство от документ с помощта на MongoTemplate

  4. Каква е разликата между Date.now() и Date.now в mongoose?

  5. Как да филтрирате документи въз основа на вграден масив?