x
1

Control de concurrencia optimista



El control de concurrencia optimista (en inglés Optimistic concurrency control o OCC) es un método de control de concurrencia que se aplica a sistemas transaccionales, tales como sistemas de gestión de bases de datos relacionales y memoria transaccional de software. El OCC asume que múltiples transacciones se pueden completar frecuentemente sin interferir entre sí. Mientras se ejecutan, las transacciones utilizan recursos de datos sin adquirir bloqueos en esos recursos. Antes de hacer el commit, cada transacción verifica que ninguna otra transacción ha modificado los datos que ha leído. Si la comprobación revela modificaciones en conflicto, la transacción que iba a hacer commit hace un rollback y se puede reiniciar.[1]​ El control de concurrencia optimista fue propuesto por primera vez por H. T. Kung.[2]

El OCC se utiliza generalmente en entornos con baja contención de datos. Cuando los conflictos son poco frecuentes, las transacciones se pueden completar sin el coste de la gestión de bloqueos y sin tener transacciones esperando a que se borren los bloqueos de otras transacciones, dando lugar a un mayor rendimiento que otros métodos de control de concurrencia. Sin embargo, si la contención de recursos de datos es frecuente, el coste de reiniciar las transacciones repetidamente perjudica el rendimiento de manera significativa; comúnmente se piensa que otros métodos de control de concurrencia tienen un mejor rendimiento en estas condiciones. Sin embargo, los métodos basados en bloqueos ("pesimistas") también pueden ofrecer un rendimiento pobre porque los bloqueos pueden limitar drásticamente la concurrencia efectiva incluso cuando se evitan los deadlocks.

Más en concreto, las transacciones del OCC implican estas fases:

La naturaleza sin estado de HTTP hace que el bloqueo no sea factible para interfaces de usuarios web. Es común que un usuario empiece a editar un registro y, a continuación, salga sin seguir un enlace de "cancelar" o " cerrar sesión". Si se utilizan bloqueos, otros usuarios que intentan editar el mismo registro deben esperar hasta que el bloqueo del primer usuario termine.

HTTP proporciona una forma de OCC incorporada: El método GET devuelve un ETag para un recurso y PUTs posteriores utilizan el valor del ETag en las cabeceras If-Match ; mientras que el primer PUT tendrá éxito, el segundo no, ya que el valor de If-Match está basado en la primera versión del recurso.[3]

Algunos sistemas de gestión de bases de datos ofrecen OCC de forma nativa - sin necesidad de código de aplicación especial. Para otros, la aplicación puede implementar una capa de OCC fuera de la base de datos, y no tener que esperar o sobrescribir registros en silencio. En tales casos, el formulario incluye un campo oculto con el contenido del registro original, un timestamp, un número de secuencia, o un token opaco. Al enviar (submit), se compara con la base de datos. Si es diferente, se invoca el algoritmo de resolución de conflictos.



Escribe un comentario o lo que quieras sobre Control de concurrencia optimista (directo, no tienes que registrarte)


Comentarios
(de más nuevos a más antiguos)


Aún no hay comentarios, ¡deja el primero!