Los sistemas de gestión de bases de datos (SGBD) permiten varias consultas a la vez.1 Para eso, usan un modelo de procesos que protege la información. Cada operación se llama transacción. Empieza con «begin-transaction» y termina con «end-transaction».

Las transacciones siguen las normas ACID. Esto quiere decir que son atómicas, consistentes, están aisladas y son duraderas. Durante su vida, una transacción puede estar activa, parcialmente hecha, fallar, ser cancelada o completarse.

Puntos Clave

  • Los SGBD permiten muchas consultas juntas usando un modelo especial para no dañar los datos.
  • Cada transacción sigue las reglas de ACID: son completas, coherentes, independientes y firmes.
  • Una transacción puede estar en varios estados, desde activa hasta completada o cancelada.
  • Es esencial manejar bien las transacciones y la concurrencia para cuidar la base de datos.
  • Se usan métodos como el control pesimista y el optimista para respetar las reglas de ACID.

Transacciones en Bases de Datos

Las transacciones son vitales en los sistemas de gestión de bases de datos (SGBD). Ayudan a mantener los datos seguros. Siguen las propiedades ACID para asegurar cambios seguros y confiables en la base de datos.

Propiedades ACID

Las transacciones deben cumplir con ciertas reglas. Estas son las propiedades ACID.

  • Atomicidad: Una transacción es una operación atómica. Sucede toda o no aparece nada.1
  • Consistencia: Cada transacción mantiene la base de datos coherente por sí sola.1
  • Aislamiento: Las transacciones no se mezclan. Los resultados de una no afectan a otra.1
  • Durabilidad: Los cambios hechos con éxito en una transacción no se pierden.1

Estados de una Transacción

Una transacción puede estar en varios estados en la base de datos.

  1. Activa: Está en proceso de ejecución.1
  2. Parcialmente comprometida: Tras su última instrucción.1
  3. Fallida: No se puede completar por un problema.1
  4. Abortada: Se deshacen sus cambios y la BD vuelve atrás.1
  5. Comprometida: Ha concluido como se esperaba.1

Es esencial manejar bien las transacciones y la concurrencia. Esto asegura que los datos siempre estén íntegros en las bases de datos. Saber sobre las propiedades ACID y los estados de las transacciones es clave para esta tarea.

Manejo de Transacciones y Concurrencia en Bases de Datos

Los SGBD necesitan un buen manejo de transacciones y concurrencia.1 Esto ayuda a mantener los datos seguros. Es importante que las transacciones puedan trabajar juntas sin problemas, cumpliendo con las normas ACID. Las técnicas para esto son tanto pesimistas como optimistas.1

Hibernate no bloquea objetos en la memoria, y su comportamiento depende del nivel de aislamiento que use en las transacciones.1 Una SessionFactory es segura para usar entre diferentes tareas de una aplicación, pero toma tiempo crearla.1 Las transacciones largas pueden detener el crecimiento de aplicaciones con mucha demanda al mismo tiempo.1 En sistemas cliente/servidor con varios usuarios, usar una sesión nueva para cada petición es lo más práctico.1 Mantener una transacción activa por mucho tiempo, en un escenario de muchos usuarios, evita que la aplicación mejore su rendimiento.1 Hibernate incluye opciones para manejar la concurrencia optimista automáticamente. También ayuda a unir objetos que vienen de distintas sesiones para guardar cambios.1 Puedes ampliar la duración de Sessions y transacciones si usas aplicaciones servlet hasta que acabe la entrega de una vista.1

SQL Server ofrece distintos niveles de aislamiento, como no comprometida, comprometida, repetible y secuenciable.2 En cambio, Oracle limita los niveles de aislamiento a comprometida y secuenciable solamente.2 En todo sistema de bases de datos, encontrarás bloques diferentes para controlar el acceso, desde read-locks hasta write-locks.2 La variedad de bloqueos va de fila hasta database, dependiendo de cuánto control se quiera tener sobre concurrencia.2 Existen modos de bloqueo como compartido, exclusivo, actualización. Se usan para diferentes tipos de operaciones en la base de datos.2

Control de Concurrencia Pesimista

En el control de concurrencia pesimista, los Sistemas de Gestión de Bases de Datos (SGBD) usan bloqueos. Esto evita que transacciones se interrumpan entre ellas.1

Se usan varios tipos de bloqueos, como los de lectura y escritura. Además, hay diferentes niveles de bloqueo, desde el nivel de fila hasta el de base de datos.2

Técnicas Basadas en Bloqueos

Para mantener la integridad de los datos, se aplican bloqueos en el sistema de base de datos. Estos bloqueos son parte de las técnicas de concurrencia pesimista. Ayudan a que las transacciones no interfieran entre ellas.2

Protocolos de Bloqueo de Dos Fases

La técnica de bloqueo de dos fases es un enfoque de concurrencia pesimista. Una transacción obtiene todos los bloqueos que necesita al inicio. Después los va soltando, evitando deadlocks.1

Control de Concurrencia Pesimista

Control de Concurrencia Optimista

El control optimista no bloquea datos al leerlos.1 Si un usuario quiere actualizarlos, se revisa si otros los cambiaron ya.1 Si esto ocurre, hay un error y la acción se deshace.

Validación de Transacciones

Este método optimista pasa por tres fases.3 Se empieza leyendo, luego validando y, finalmente, escribiendo.3 En el paso de validar, se estudia si se pueden recordar los datos sin problemas en la base de datos.3

Resolución de Conflictos

Si surge un conflicto, el sistema debe arreglarlo.3 Normalmente, se deja que los datos de la transacción más nueva sean los que cuenten. O bien, se usan reglas especiales para decidir.3

Características de las Transacciones

Las transacciones en bases de datos tienen cuatro características esenciales. Son atomicidad, consistencia, aislamiento y durabilidad, llamadas así por las iniciales ACID.

Atomicidad

La atomicidad ve las transacciones como algo indivisible. Osea, o se completan todas las operaciones de la transacción, o ninguna se realiza.2 Esto es hasta para las acciones más pequeñas en sistemas operativos que se comparten en el tiempo.

Consistencia

La consistencia es vital. Nos dice que cada transacción mantiene la base de datos coherente. Si se siguen las reglas de integridad, no habrá problemas.3

Aislamiento

El aislamiento asegura que lo que hagas en una transacción, no afecte a otra. Cada transacción es como si trabajara en su propio mundo.3

Durabilidad

Con la durabilidad, los cambios importantes persisten aun después de que termine la transacción. Este es otro principio crucial.3

Niveles de Aislamiento

Los niveles de aislamiento son esenciales en bases de datos para proteger los datos. Ayudan a evitar problemas cuando varias transacciones ocurren al mismo tiempo. Existen varios niveles que determinan cuán separadas están las acciones de cada transacción. Los más conocidos son:2

Lectura No Comprometida

Aquí, se evita leer datos que estén en proceso de cambio, lo que previene ver información incorrecta.2 A pesar de esto, es posible acceder a datos que aún no han sido confirmados. Esto puede resultar en datos malos o inconsistentes.2

Lectura Comprometida

En este nivel de aislamiento, solo se permiten leer datos ya confirmados, lo que garantiza su precisión. Así, se evita que se lean datos que puedan cambiar. Pero, aún se pueden ver cambios no confirmados hechos por otras transacciones.2

Lectura Repetible

Al elegir la lectura repetible, se obtienen los mismos datos cada vez que lees. Esto descarta la posibilidad de ver datos que no estaban antes en esas lecturas, también conocidos como «fantasmas».2

Secuenciable

El nivel más alto es el secuenciable, donde las transacciones no interfieren entre sí. Cada una se completa antes de comenzar la siguiente, asegurando así que nada se mezcle.2

Control de Concurrencia Optimista

En el control de concurrencia optimista, las transacciones se guardan temporalmente. No se actualiza la base de datos directamente.1 Se evade el bloqueo de objetos en memoria.1

Fase de Lectura

En el proceso de lectura, las transacciones leen los datos sin bloquearlos.1 La integridad de los datos se mantiene con técnicas optimistas.3

Fase de Validación

Se prueba si es seguro pasar los datos temporales a la base.1 Esto previene conflictos entre transacciones.3

Fase de Escritura

Después de validar sin errores, las operaciones se guardan en la base.1 Así, se asegura la integridad de los datos ante transacciones simultáneas.3

Control de Concurrencia Optimista

Implementación de Transacciones

Hay dos formas de trabajar con transacciones: de forma implícita o explícita. La manera explícita incluye pasos como BEGIN TRANSACTION y COMMIT/ROLLBACK. Esta forma da más control. También, podemos usar puntos de guardado y realizar transacciones dentro de otras.2

La programación puede ser automática o estar bien definida. Depende de las acciones que necesitemos hacer.2

En el uso de Hibernate, es preferible mantener las transacciones breves. Esto evita problemas con los bloqueos.1 Hibernate también tiene herramientas que hacen más fácil controlar cambios a la vez que otra persona.1

Para aplicaciones con muchos usuarios, se suele seguir el patrón de sesión por cada pedido. Esto significa que varias acciones en la base de datos están dentro de una sola tarea.1 Hibernate permite unirse a sesiones antiguas para no perder cambios.1 Hay posibilidad de seguir una sesión de Hibernate más tiempo y volver a conectarla si se necesita.1

Enlaces de origen

  1. https://docs.jboss.org/hibernate/orm/3.6/reference/es-ES/html/transactions.html
  2. https://www.fdi.ucm.es/profesor/fernan/DBD/apuntestema07.pdf
  3. http://sedici.unlp.edu.ar/bitstream/handle/10915/73561/Documento_completo.pdf?sequence=1

Deja un comentario