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

Control de versiones de Mongoose:¿cuándo es seguro deshabilitarlo?

El objetivo de la clave de versión es el bloqueo optimista.

Cuando está habilitado, el valor de la versión se incrementa atómicamente cada vez que se actualiza un documento.

Esto permite que el código de su aplicación pruebe si se han realizado cambios entre una obtención (introduciendo la clave de versión 42, por ejemplo) y una actualización posterior (asegurándose de que el valor de la versión siga siendo 42). Si la clave de versión tiene un valor diferente (p. ej., 43 porque se ha realizado una actualización en el documento), el código de su aplicación puede manejar la modificación simultánea.

El mismo concepto se usa a menudo en bases de datos relacionales en lugar del bloqueo pesimista que puede generar un rendimiento horrible. Todos los ORM decentes proporcionan esta función. Por ejemplo, está muy bien descrito en la documentación de ObjectDB . Es una base de datos de objetos implementada en Java pero se aplica el mismo concepto.

La entrada de blog vinculado en el comentario de Behlül demuestra la utilidad de bloqueo optimista con un ejemplo concreto, pero solo para cambios de matrices, consulte a continuación.

Por el contrario, aquí hay un caso simple en el que no sirve:un perfil de usuario que puede ser editado por su propio propietario. Aquí puede deshacerse del bloqueo optimista y asumir que la última edición siempre gana.

Entonces, solo usted sabe si su aplicación necesita un bloqueo optimista o no. Caso de uso por caso de uso.

La situación de Mangosta es algo especial.

El bloqueo optimista está habilitado solo para arreglos porque el formato de almacenamiento interno usa un índice posicional. Este es el problema descrito en la entrada de blog vinculado en el comentario de la pregunta. Encontré la explicación dado en el mongoose-orm lista de correo bastante clara:si necesita un bloqueo optimista para otros campos, debe manejarlo usted mismo.

Aquí hay un gist mostrando cómo implementar una estrategia de reintento para un add operación. Nuevamente, cómo desea manejarlo depende de sus casos de uso, pero debería ser suficiente para comenzar.

Espero que esto aclare las cosas.

Saludos