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

MongoDB:Czy operacje zbiorcze są zapisywane w oplogu jako całości?

Wejdę w to z ogólnym zastrzeżeniem, że przyznaję, że nawet nie patrzyłem na wyniki, ale podstawowe zasady wydają mi się ważne od samego początku.

To, co musisz tutaj wziąć pod uwagę, to „co faktycznie dzieje się pod maską” „ładnego cukru składniowego”, który przedstawia się w ogólnych rozmowach. Oznacza to po prostu przyjrzenie się temu, co faktycznie robi „forma polecenia” operacji, które wywołujesz. W tym przypadku "aktualizacja" .

Tak więc, jeśli już zajrzałeś do tego linku, rozważ następujące "Bulk formularz aktualizacji:

var bulk = db.collection.initializeOrdedBulkOp();

bulk.find({ "_id": 1 }).updateOne({ "$set": { "a": 1 } });
bulk.find({ "_id": 2 }).updateOne({ "$set": { "b": 2 } });

bulk.execute();

Teraz już wiesz, że jest to wysyłane na serwer jako jeden prośba, ale prawdopodobnie nie bierzesz pod uwagę, że faktyczna „prośba” złożona „pod maską” jest w rzeczywistości taka:

db.runCommand({
    "update": "collection",
    "updates": [
        { "q": { "_id": 1 }, "u": { "$set": { "a": 1 } } },
        { "q": { "_id": 2 }, "u": { "$set": { "b": 2 } } }
    ],
    "ordered": true
})

Dlatego jest zrozumiałe, że to, co faktycznie widzisz w dziennikach w ramach operacji „aktualizacji”, jest w rzeczywistości czymś w rodzaju (w skrócie od pełnego wyniku do samego zapytania):

{ "q": { "_id": 1 }, "u": { "$set": { "a": 1 } } }
{ "q": { "_id": 2 }, "u": { "$set": { "b": 2 } } }

Oznacza to, że każda z tych akcji z powiązanym poleceniem znajduje się w oplogu dla "odtwarzania" przy replikacji i/lub innych czynności, które możesz wykonać, takich jak konkretnie "odtwarzanie" wpisów oplog.

Byłbym pewien, że tak właśnie się dzieje, nawet nie patrząc, ponieważ wiem, że w ten sposób sterowniki implementują rzeczywiste wywołania i ma sens, aby każde wywołanie było w ten sposób utrzymywane w oplogu.

Dlatego „jako całość”, to nie. Nie są to „transakcje” i zawsze są to odrębne operacje, nawet jeśli ich złożenie i zwrot odbywa się w ramach jednego żądania. Ale oni nie jest to pojedyncza operacja, dlatego nie zostanie i nie powinna być jako taka rejestrowana.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Node.js Mongoose .update z ArrayFilters

  2. Znajdź przy użyciu _id nie działa z agregacją

  3. Jak przekazać wiele wartości podczas przesyłania obrazu na serwer (przesyłanie plików za pomocą AngularJS i NodeJS)?

  4. Monitorowanie serwera Percona dla MongoDB — kluczowe wskaźniki

  5. JBAS011445:Nie udało się uzyskać adaptera dla dostawcy trwałości „org.hibernate.ogm.jpa.HibernateOgmPersistence”