stringtranslate.com

Bloqueo de registros

El bloqueo de registros es la técnica de impedir el acceso simultáneo a los datos de una base de datos , para evitar resultados inconsistentes.

El ejemplo clásico lo demuestran dos empleados de banco que intentan actualizar la misma cuenta bancaria para dos transacciones diferentes. Los empleados 1 y 2 recuperan (es decir, copian) el registro de la cuenta . El empleado 1 aplica y guarda una transacción. El cajero 2 aplica una transacción diferente a su copia guardada y guarda el resultado, basándose en el registro original y sus cambios, sobrescribiendo la transacción ingresada por el cajero 1. El registro ya no refleja la primera transacción, como si nunca hubiera tenido lugar.

Una forma sencilla de evitar esto es bloquear el archivo cada vez que un usuario modifica un registro, de modo que ningún otro usuario pueda guardar datos. Esto evita que los registros se sobrescriban incorrectamente, pero permite que solo se procese un registro a la vez, bloqueando a otros usuarios que necesitan editar registros al mismo tiempo.

Para permitir que varios usuarios editen una tabla de base de datos al mismo tiempo y también evitar inconsistencias creadas por el acceso sin restricciones, se puede bloquear un solo registro cuando se recupera para editarlo o actualizarlo. A cualquier persona que intente recuperar el mismo registro para editarlo se le deniega el acceso de escritura debido al bloqueo (aunque, dependiendo de la implementación, es posible que pueda ver el registro sin editarlo). Una vez que se guarda el registro o se cancelan las ediciones, se libera el bloqueo. Los registros nunca se pueden guardar para sobrescribir otros cambios, preservando la integridad de los datos .

En la teoría de la gestión de bases de datos, el bloqueo se utiliza para implementar el aislamiento entre múltiples usuarios de bases de datos. Esta es la "yo" del acrónimo ACID .

Jim Gray escribió una descripción exhaustiva y autorizada del bloqueo . [1]

Granularidad de cerraduras

Si los empleados del banco (para seguir la ilustración anterior) atienden a dos clientes, pero sus cuentas están contenidas en un libro mayor, entonces todo el libro mayor, o una o más tablas de la base de datos , debería estar disponible para que los empleados puedan editarlos en orden. para que cada uno complete una transacción, uno a la vez ( bloqueo de archivos ). Si bien es seguro, este método puede provocar esperas innecesarias.

Si los empleados pueden eliminar una página del libro mayor, que contiene la cuenta del cliente actual (más varias otras cuentas), entonces se puede atender a varios clientes simultáneamente , siempre que la cuenta de cada cliente se encuentre en una página diferente a la de los demás. Si dos clientes tienen cuentas en la misma página, solo se podrá atender a uno a la vez. Esto es análogo a un bloqueo a nivel de página en una base de datos.

Se logra un mayor grado de granularidad si un empleado puede tomar cada cuenta individual. Esto permitiría atender a cualquier cliente sin esperar a que otro cliente acceda a una cuenta diferente. Esto es análogo a un bloqueo a nivel de registro y normalmente es el grado más alto de granularidad de bloqueo en un sistema de gestión de bases de datos.

En una base de datos SQL , un registro normalmente se denomina "fila".

La introducción de bloqueos granulares (subconjuntos) crea la posibilidad de que se produzca una situación denominada punto muerto . El punto muerto es posible cuando se utiliza el bloqueo incremental (bloquear una entidad y luego bloquear una o más entidades adicionales). Por ejemplo, si dos clientes de un banco pidieran a dos empleados que obtuvieran la información de su cuenta para poder transferir algo de dinero a otras cuentas, las dos cuentas esencialmente estarían bloqueadas. Luego, si los clientes decían a sus empleados que el dinero iba a transferirse a las cuentas de los demás, los empleados buscaban las otras cuentas pero encontraban que estaban "en uso" y esperaban a que las devolvieran. Sin saberlo, los dos empleados se esperan el uno al otro y ninguno de ellos puede completar su transacción hasta que el otro se da por vencido y devuelve la cuenta. Se utilizan varias técnicas para evitar estos problemas.

uso de cerraduras

Los bloqueos de registros deben gestionarse entre las entidades que solicitan los registros de manera que ninguna entidad reciba demasiado servicio a través de concesiones sucesivas y ninguna otra entidad quede efectivamente bloqueada. Las entidades que solicitan un bloqueo pueden ser aplicaciones (programas) individuales o un procesador completo.

La aplicación o sistema debe diseñarse de manera que cualquier bloqueo se mantenga durante el menor tiempo posible. La lectura de datos, sin funciones de edición, no requiere un bloqueo y, por lo general, se permite la lectura de registros bloqueados.

Se pueden solicitar dos tipos principales de cerraduras:

Cerraduras exclusivas

Los candados exclusivos los posee exclusivamente una sola entidad, generalmente con el fin de escribir en el registro. Si el esquema de bloqueo estuviera representado por una lista, la lista de titulares contendría solo una entrada. Dado que este tipo de bloqueo bloquea efectivamente cualquier otra entidad que requiera el procesamiento del bloqueo, se debe tener cuidado para:

Los no titulares del candado (también conocidos como camareros ) pueden ser mantenidos en una lista que se atiende en forma circular o en una cola FIFO . Esto garantizaría que cualquier posible camarero tuviera las mismas posibilidades de obtener el candado y no quedar fuera. Para acelerar aún más el proceso, si una entidad se ha quedado dormida esperando un bloqueo, el rendimiento mejora si se notifica a la entidad sobre la concesión, en lugar de descubrirlo en algún tipo de activación impulsada por el tiempo de espera del sistema.

Cerraduras compartidas

Los candados compartidos se diferencian de los candados exclusivos en que la lista de titulares puede contener varias entradas. Los bloqueos compartidos permiten a todos los titulares leer el contenido del registro sabiendo que el registro no se puede cambiar hasta que todos los titulares hayan liberado el bloqueo. No se pueden obtener bloqueos exclusivos cuando un registro ya está bloqueado (exclusivamente o compartido) por otra entidad.

Si las solicitudes de bloqueo para la misma entidad están en cola, una vez que se otorga un bloqueo compartido, también se pueden otorgar todos los bloqueos compartidos en cola. Si se encuentra un bloqueo exclusivo a continuación en la cola, debe esperar hasta que se hayan liberado todos los bloqueos compartidos. Al igual que con los candados exclusivos, estos candados compartidos deben mantenerse durante el menor tiempo posible.

Ver también

Referencias

  1. ^ Gray, Jim y Reuter, Andreas (1993), Procesamiento de transacciones distribuidas: conceptos y técnicas, Morgan Kaufmann, págs. 375–437, ISBN 1-55860-190-2