stringtranslate.com

Control de concurrencia optimista

El control de concurrencia optimista ( OCC ), también conocido como bloqueo optimista , es un método de control de concurrencia sin bloqueo aplicado a sistemas transaccionales como los sistemas de gestión de bases de datos relacionales y la memoria transaccional de software . OCC supone que varias transacciones pueden completarse con frecuencia sin interferir entre sí. Mientras se ejecutan, las transacciones utilizan recursos de datos sin adquirir bloqueos en esos recursos. Antes de confirmarse, cada transacción verifica que ninguna otra transacción haya modificado los datos que ha leído. Si la verificación revela modificaciones conflictivas, la transacción que confirma se revierte y puede reiniciarse. [1] El control de concurrencia optimista fue propuesto por primera vez en 1979 por HT Kung y John T. Robinson. [2]

OCC se utiliza generalmente en entornos con poca contención de datos . Cuando los conflictos son poco frecuentes, las transacciones pueden completarse sin el gasto de gestionar bloqueos y sin que las transacciones tengan que esperar a que se eliminen los bloqueos de otras transacciones, lo que genera un mayor rendimiento que otros métodos de control de concurrencia. Sin embargo, si la contención de los recursos de datos es frecuente, el coste de reiniciar transacciones repetidamente perjudica el rendimiento de manera significativa, en cuyo caso otros métodos de control de concurrencia pueden ser más adecuados. Sin embargo, los métodos basados ​​en bloqueos ("pesimistas") también pueden ofrecer un rendimiento deficiente porque el bloqueo puede limitar drásticamente la concurrencia efectiva incluso cuando se evitan los bloqueos.

Fases del control de concurrencia optimista

Las transacciones de control de concurrencia optimistas implican estas fases: [2]

Uso de la web

La naturaleza sin estado de HTTP hace que el bloqueo no sea viable para las interfaces de usuario web. Es común que un usuario comience a editar un registro y luego lo abandone sin hacer clic en un vínculo de "cancelar" o "cerrar sesión". Si se utiliza el bloqueo, otros usuarios que intenten editar el mismo registro deben esperar hasta que se agote el tiempo de bloqueo del primer usuario.

HTTP proporciona una forma de OCC integrado. La respuesta a una solicitud GET inicial puede incluir una ETag para que las solicitudes PUT posteriores la utilicen en el encabezado If-Match. Cualquier solicitud PUT con una ETag desactualizada en el encabezado If-Match puede ser rechazada. [3]

Algunos sistemas de gestión de bases de datos ofrecen OCC de forma nativa, sin necesidad de código de aplicación especial. En otros casos, la aplicación puede implementar una capa OCC fuera de la base de datos y evitar la espera o la sobrescritura silenciosa de registros. En tales casos, el formulario puede incluir un campo oculto con el contenido original del registro, una marca de tiempo, un número de secuencia o un token opaco. Al enviarlo, se compara con la base de datos. Si difiere, se invoca el algoritmo de resolución de conflictos.

Ejemplos

Véase también

Referencias

  1. ^ Johnson, Rohit (2003). "Problemas habituales de acceso a datos". Diseño y desarrollo J2EE personalizado por expertos . Wrox Press. ISBN 978-0-7645-4385-2Archivado desde el original el 8 de octubre de 2011.
  2. ^ ab HT Kung, JT Robinson (1981). "Sobre métodos optimistas para el control de concurrencia" (PDF) . Transacciones ACM en sistemas de bases de datos. Archivado (PDF) desde el original el 31 de agosto de 2019.
  3. ^ "Editar la Web - Detección del problema de actualización perdida mediante el uso de la verificación sin reserva". Nota del W3C . 10 de mayo de 1999.
  4. ^ Ayuda:Editar conflicto
  5. ^ "Bugzilla: FAQ: Preguntas administrativas". MozillaWiki . 11 de abril de 2012.
  6. ^ "Módulo ActiveRecord::Locking". Documentación de Rails Framework .
  7. ^ "Mapeo relacional de objetos (GORM)". Documentación de Grails Framework . Archivado desde el original el 15 de agosto de 2014.
  8. ^ "Procesamiento de transacciones". Guía del programador GT.M, edición UNIX .
  9. ^ "Manejo de conflictos de concurrencia". Centro de documentación de Entity Framework . 5 de julio de 2023.
  10. ^ "Concurrencia de transacciones - Control de concurrencia optimista". Desarrolladores de Mimer - Características . Consultado el 22 de diciembre de 2023 .
  11. ^ "El almacén de datos". ¿Qué es Google App Engine? 27 de agosto de 2010.
  12. ^ "Actualización de partes de documentos" . Consultado el 28 de junio de 2018 .
  13. ^ "Control de concurrencia optimista". Elastic . Consultado el 5 de febrero de 2024 .
  14. ^ "Descripción técnica". Documentación de Apache CouchDB . Consultado el 6 de febrero de 2024 .
  15. ^ "Transacciones - MonetDB". 16 de enero de 2013.
  16. ^ "Transacciones en Redis".
  17. ^ "Trabajar con elementos y atributos: escrituras condicionales" . Consultado el 2 de noviembre de 2020 .
  18. ^ "Descripción general de la API: operaciones de recursos" . Consultado el 3 de noviembre de 2020 .
  19. ^ Yugabyte, Team. "Bloqueo explícito | Documentación de YugabyteDB". docs.yugabyte.com . Consultado el 4 de enero de 2022 .

Enlaces externos