sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo funciona el modificador $inc con solicitudes simultáneas en mongodb?

Es un poco amplio en realidad, pero puedo ofrecer los trazos generales. A partir de MongoDB utiliza bloqueo de nivel de colección con el motor de almacenamiento predeterminado. También está disponible el motor de almacenamiento WiredTiger que implementa bloqueo de nivel de documento . Pero, básicamente, en todas las versiones hay cierto nivel de "bloqueo" que ocurre en cada solicitud. Cuanto más fino sea el nivel, mejor dependiendo de sus necesidades reales de rendimiento.

Esencialmente, no ocurren dos solicitudes al mismo tiempo, ya que se "bloquearán" en el bloqueo que se realiza hasta que se libera. Entonces, el valor que se devolvería (por ejemplo, findAndModify() request ), sería el "estado actual" para cuando se realizó esa solicitud.

Entonces, en tal solicitud, la declaración que se ejecutó primero devolvería un valor de 2, y la siguiente declaración ejecutada devolvería un valor de 3. La posición final en la base de datos es que el valor actual sería 3.

Por lo tanto, no hay forma de que algo pueda "modificarse" al mismo tiempo, y el estado final sería el que ocurre después de que se hayan emitido "todas" las solicitudes. Entonces $inc y otros operadores hacen exactamente lo que deben y modifican el contenido según el estado del documento en el momento en que realmente pudo acceder a él.