sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:Zapisují se hromadné operace do oplogu jako celku?

Vstoupím do toho s obecným upozorněním, že přiznávám, že jsem se ani nedíval na výsledky, ale základní principy se mi zdají od začátku platné.

Zde musíte vzít v úvahu „co se vlastně děje pod pokličkou“ „hezkého syntaktického cukru“, který se vám zobrazuje v obecných hovorech. To znamená, že se v podstatě díváme na to, co „příkazová forma“ operací, které voláte, skutečně dělá. V tomto případě "update" .

Pokud jste se tedy již na tento odkaz podívali, zvažte následující "Hromadné " ." aktualizační formulář:

var bulk = db.collection.initializeOrdedBulkOp();

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

bulk.execute();

Nyní již víte, že se toto odesílá na server jako jeden žádost, ale pravděpodobně nezvažujete, že skutečná „žádost“ učiněná „pod kapotou“ je ve skutečnosti tato:

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

Proto je logické, že to, co ve skutečnosti vidíte v protokolech pod operací „aktualizace“, je ve skutečnosti něco jako (zkráceně z úplného výstupu pouze na dotaz):

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

Což tedy znamená, že každá z těchto akcí s přidruženým příkazem je v oplogu pro „přehrání“ při replikaci a/nebo při jiných akcích, které můžete provést, jako je konkrétně „přehrání“ položek oplogu.

Byl bych si jistý, že se to skutečně děje, aniž bych se podíval, protože vím, že to, jak ovladače realizují skutečná volání, a dává smysl, že každé volání je tímto způsobem uchováváno v oplogu.

Proto "jako celek", tedy ne. Nejedná se o „transakce“ a jedná se vždy o samostatné operace, i když jejich odeslání a vrácení jsou v rámci jediného požadavku. Ale nejsou ojedinělá operace, a proto nebude a neměla by být jako taková zaznamenávána.




  1. Jaká je základní architektura aplikace node.js + mongodb?

  2. Mongodb nemá oprávnění správce ke spuštění příkazu listDatabases

  3. Spring Data MongoRepository Ukládání objektů s různým počtem polí

  4. Jak odstranit Redis na posluchačích 'zprávy'