MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come funziona il modificatore $inc con richieste simultanee in mongodb?

È davvero un po' ampio, ma posso offrire i tratti più ampi. A partire da MongoDB utilizza il blocco a livello di raccolta con il motore di archiviazione predefinito. È disponibile anche il motore di archiviazione WiredTiger che implementa blocco a livello di documento . Ma fondamentalmente in tutte le versioni c'è un certo livello di "blocco" che si verifica su ogni richiesta. Più fine è il livello, meglio è a seconda delle tue effettive esigenze di throughput.

In sostanza, non si verificano effettivamente due richieste contemporaneamente poiché "bloccheranno" il blocco eseguito fino a quando non verrà rilasciato. Quindi il valore che verrebbe restituito ( ad esempio a findAndModify() request ), si troverebbe nello "stato corrente" di quando è stata effettuata la richiesta.

Quindi, su tale richiesta, l'istruzione eseguita per prima restituirà un valore di 2 e l'istruzione successiva restituirà un valore di 3. La posizione finale nel database è che il valore sarebbe attualmente 3.

Quindi non c'è modo che qualcosa possa "modificare" allo stesso tempo e lo stato finale sarebbe quello che si verifica dopo che "tutte" le richieste sono state emesse. Quindi $inc e altri operatori fanno esattamente come dovrebbero e modificano il contenuto in base allo stato del documento nel momento in cui è stato effettivamente in grado di accedervi.