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

Jak funguje modifikátor $inc se souběžnými požadavky v mongodb?

Je to opravdu trochu široké, ale mohu nabídnout široké tahy. Od MongoDB používá uzamykání na úrovni kolekce s výchozím úložištěm. K dispozici je také úložný modul WiredTiger, který implementuje uzamčení na úrovni dokumentu . Ale v zásadě ve všech verzích existuje určitá úroveň "uzamykání", ke kterému dochází při každém požadavku. Čím jemnější úroveň, tím lépe v závislosti na vašich skutečných potřebách propustnosti.

V podstatě žádné dva požadavky ve skutečnosti neproběhnou současně, protože se „zablokují“ na zámku, který je proveden, dokud není uvolněn. Takže hodnota, která by byla vrácena (řekněme findAndModify() request ), bude k "aktuálnímu stavu" v době, kdy byl tento požadavek podán.

Takže na takový požadavek by příkaz, který byl proveden jako první, vrátil hodnotu 2 a další provedený příkaz by vrátil hodnotu 3. Konečná pozice v databázi je taková, že hodnota by v současnosti byla 3.

Neexistuje tedy žádný způsob, jak by se něco mohlo „upravit“ současně a konečný stav by byl stav, který nastane po vydání „všech“ požadavků. Takže $inc a další operátoři dělají přesně tak, jak mají, a upravují obsah na základě stavu dokumentu v době, kdy k němu byl skutečně schopen přistupovat.




  1. Jak z dokumentu vyloučit některá pole

  2. Návrhové vzory pro vrstvu přístupu k datům

  3. Možnosti hostování MongoDB nyní, když je odstraněn doplněk Heroku mLab

  4. Nelze se připojit k mongoDB s Nodejs pomocí Docker-compose