¿Cómo funcionan las transacciones de base de datos y ACID?


161

¿Cuál es la relación entre ACID y la transacción de la base de datos?

¿ACID da transacción de base de datos o es lo mismo?

¿Podría alguien aclarar este tema?

Respuestas:


320

ACID es un conjunto de propiedades que le gustaría aplicar al modificar una base de datos.

  • Atomicidad
  • Consistencia
  • Aislamiento
  • Durabilidad

Una transacción es un conjunto de cambios relacionados que se utiliza para lograr algunas de las propiedades de ACID. Las transacciones son herramientas para lograr las propiedades ACID.

Atomicidad significa que puede garantizar que todas las transacciones sucedan, o ninguna de ellas sucede; puede realizar operaciones complejas como una sola unidad, todo o nada, y un bloqueo, falla de energía, error o cualquier otra cosa no le permitirá estar en un estado en el que solo se hayan producido algunos de los cambios relacionados.

La coherencia significa que usted garantiza que sus datos serán consistentes; Ninguna de las restricciones que tiene sobre los datos relacionados será violada.

El aislamiento significa que una transacción no puede leer datos de otra transacción que aún no se ha completado. Si dos transacciones se ejecutan simultáneamente, cada una verá el mundo como si se ejecutara secuencialmente, y si una necesita leer datos escritos por otra, tendrá que esperar hasta que la otra termine.

La durabilidad significa que una vez que se completa una transacción, se garantiza que todos los cambios se hayan registrado en un medio duradero (como un disco duro), y el hecho de que la transacción se haya completado también se registra.

Entonces, las transacciones son un mecanismo para garantizar estas propiedades; son una forma de agrupar acciones relacionadas de manera tal que, en conjunto, un grupo de operaciones puede ser atómico, producir resultados consistentes, aislarse de otras operaciones y registrarse de forma duradera.


66
Usted dice "La coherencia significa que garantiza que sus datos serán consistentes; ninguna de las restricciones que tiene sobre los datos relacionados será violada". Si por restricciones se refiere a las definidas en la base de datos (por ejemplo, verificar restricciones), ¿qué tiene que ver la gestión de transacciones para evitar que se violen? ¿No están siempre en vigor? Me parece que la C en ACID debe tener otro significado.
Marc Rochkind

20
@MarcRochkind Una transacción le permite aplicar comprobaciones de coherencia incluso si las operaciones individuales dentro de la transacción violan las restricciones de coherencia. Por ejemplo, si está actualizando un sistema de contabilidad de doble entrada, es posible que deba cargar en varias cuentas y abonar en varias cuentas al mismo tiempo. Sin transacciones, verificaría las restricciones después de cada declaración y fallaría porque las declaraciones individuales no conservan la coherencia. Con las transacciones, aunque las declaraciones individuales no conservan la coherencia, la transacción en su conjunto sí.
Brian Campbell

1
" y si uno necesita leer datos escritos por otro, tendrá que esperar hasta que el otro termine ", no es del todo cierto. La primera transacción puede (y leerá) esos datos y verá el estado tal como estaba antes de que comenzara la segunda transacción.
a_horse_with_no_name

1
@BrianCampbell 1) ¿La consistencia es tanto "restricciones de verificación" como ÚNICA, LLAVE EXTRANJERA como un estado válido (de acuerdo con la lógica / requisito comercial de la aplicación) al final de la transacción? 2) ¿La atomicidad y / o el aislamiento por sí solos no aseguran la consistencia? ¿Deberíamos mencionar la Consistencia explícitamente como una propiedad requerida?
user104309

1
@a_horse_with_no_name está hablando de OCC (control de concurrencia optimista) v / s PCC (pesimista). Ambos se pueden implementar en un sistema de base de datos compatible con ACID, depende de si se busca consistencia o alta disponibilidad.
Siddhartha

37

ACID son propiedades deseables de cualquier motor de procesamiento de transacciones.

Un DBMS es (si es bueno) un tipo particular de motor de procesamiento de transacciones que expone, generalmente en gran medida, pero no del todo, esas propiedades.

Pero existen otros motores que también pueden exponer esas propiedades. El tipo de software que solía llamarse "monitores TP" es un ejemplo (hoy en día el equivalente es principalmente servidores web).

Dichos monitores TP pueden acceder a recursos que no sean un DBMS (por ejemplo, una impresora), y aún así garantizan ACID a sus usuarios. Como ejemplo de lo que podría significar ACID cuando una impresora está involucrada en una transacción:

  • Atomicidad: se imprime un documento completo o nada
  • Consistencia: al final de la transacción, la alimentación de papel se coloca en la parte superior de la página
  • Aislamiento: no se mezclan dos documentos durante la impresión
  • Durabilidad: la impresora puede garantizar que no estaba "imprimiendo" con cartuchos vacíos.

3
Grandes ejemplos de impresoras concisas.
Lakesare

2
Buen ejemplo. Sin embargo, no entiendo la parte de "Consistencia". En mi opinión, un mejor ejemplo es "La impresora no acepta papel de más de 10 pulgadas".
skeller88

EDITAR - "papel más ancho que 10 pulgadas".
skeller88

1
Admito que uno es un poco exagerado. Pero es difícil encontrar mejores ejemplos porque la "consistencia" se trata de datos, y una impresora no es exactamente un dispositivo de datos.
Erwin Smout

1
Bueno, entonces la impresora tiene una instalación que evita que comience a imprimir si el recuento de páginas de un documento es mayor que el recuento de hojas que se sabe actualmente en el suministro de papel. Verás, ese es el problema con muchas personas que comentan aquí. Usted menciona "impresora" y solo ven ese tonto dispositivo de transmisión en serie que tienen en el escritorio de su hogar, no el dispositivo profesional de alto grado que llenaría toda su sala de estar (y que a menudo tiene ese tipo de características que mencioné).
Erwin Smout

21

Modifiqué ligeramente el ejemplo de la impresora para hacerlo más explicable

1 documento que tenía 2 páginas de contenido fue enviado a la impresora

Transacción : documento enviado a la impresora

  • atomicidad : la impresora imprime 2 páginas de un documento o ninguna
  • consistencia : la impresora imprime media página y la página se atasca. La impresora se reinicia e imprime 2 páginas con todo el contenido.
  • aislamiento - aunque había demasiadas impresiones en progreso - la impresora imprime el contenido correcto del documento
  • durabilidad : durante la impresión, hubo un corte de energía: la impresora vuelve a imprimir documentos sin errores

Espero que esto ayude a alguien a entender el concepto de ACID


No estoy seguro de lo que significa "mientras había demasiadas impresiones en progreso", ¿es solo "múltiple" en lugar de "demasiadas"?
icc97

17

¿Cuál es la relación entre ACID y la transacción de la base de datos?

En una base de datos relacional, cada instrucción SQL debe ejecutarse en el ámbito de una transacción.

Sin definir los límites de la transacción explícitamente, la base de datos utilizará una transacción implícita que se ajusta a cada declaración individual.

La transacción implícita comienza antes de que se ejecute la declaración y finaliza (confirmación o reversión) después de que se ejecuta la declaración. El modo de transacción implícita se conoce comúnmente como confirmación automática.

Como se explica en este artículo , una transacción es una colección de operaciones de lectura / escritura que tienen éxito solo si todas las operaciones contenidas tienen éxito.

Atomicidad

Inherentemente, una transacción se caracteriza por cuatro propiedades (comúnmente conocidas como ACID):

  • Atomicidad
  • Consistencia
  • Aislamiento
  • Durabilidad

¿ACID da transacción de base de datos o es lo mismo?

Para un sistema de base de datos relacional, esto es cierto porque el Estándar SQL especifica que una transacción debe proporcionar las garantías ACID:

Atomicidad

Atomicity toma operaciones individuales y las convierte en una unidad de trabajo de todo o nada, teniendo éxito si y solo si todas las operaciones contenidas tienen éxito.

Una transacción puede encapsular un cambio de estado (a menos que sea de solo lectura). Una transacción siempre debe dejar el sistema en un estado coherente, sin importar cuántas transacciones concurrentes se intercalen en un momento dado.

Consistencia

La coherencia significa que se aplican restricciones para cada transacción comprometida. Eso implica que todas las claves, tipos de datos, comprobaciones y disparadores son exitosos y no se activa ninguna violación de restricción.

Aislamiento

Las transacciones requieren mecanismos de control de concurrencia y garantizan la corrección incluso cuando se intercalan. El aislamiento nos brinda el beneficio de ocultar los cambios de estado no comprometidos del mundo exterior, ya que las transacciones fallidas nunca deberían corromper el estado del sistema. El aislamiento se logra mediante el control de concurrencia utilizando mecanismos de bloqueo pesimistas u optimistas.

Durabilidad

Una transacción exitosa debe cambiar permanentemente el estado de un sistema y, antes de finalizarlo, los cambios de estado se registran en un registro de transacciones persistentes. Si nuestro sistema se ve afectado repentinamente por un bloqueo del sistema o un corte de energía, entonces todas las transacciones confirmadas no finalizadas se pueden volver a reproducir.

ingrese la descripción de la imagen aquí

Para obtener más detalles sobre la durabilidad y el registro de rehacer, consulte este artículo .


Para "consistencia" - veo "corrección lógica específica de la aplicación" como la explicación en muchos lugares. Suponga que si ese es el caso, DB no puede conocer la lógica de la aplicación. Entonces "consistencia" no puede ser una propiedad inherente de un DB. Entonces, para que la aplicación implemente su corrección (o "consistencia"), ¿no es suficiente la Atomicidad y el Aislamiento?
user104309

1
La consistencia en ACID significa restricciones de integridad de la base de datos: PK, FK, restricciones ÚNICAS. ACID es importante, pero su aplicación puede necesitar más que eso, como evitar actualizaciones perdidas en conversaciones largas que requieren un bloqueo optimista a nivel de aplicación.
Vlad Mihalcea

Déjame ver. Pero antes de eso necesito una aclaración básica. Comentario de Brain Campbell en la respuesta aceptada "Con las transacciones, aunque las declaraciones individuales no conservan la coherencia, la transacción en su conjunto sí". Como es posible ? ¿Y cómo se relacionan los débitos y créditos múltiples con la consistencia?
user104309

Consulte el capítulo Transacciones en mi libro Java Persistence de alto rendimiento para obtener una respuesta detallada a todas esas preguntas.
Vlad Mihalcea

12

Las propiedades de ACID son conceptos muy antiguos e importantes de la teoría de bases de datos. Sé que puedes encontrar muchas publicaciones sobre este tema, pero aún así me gustaría comenzar a compartir respuestas sobre esto porque este es un tema muy importante de RDBMS.

El Sistema de base de datos juega con muchos tipos diferentes de transacciones donde todas las transacciones tienen ciertas características. Esta característica se conoce con propiedades ACID. Las propiedades de ACID se benefician de todas las transacciones de la base de datos para realizar todas las tareas.

Atomicidad: cometer todo o nada.

Consistencia: haga un registro consistente en términos de validar todas las reglas y restricciones de la transacción.

Aislamiento: asegúrese de que dos transacciones no sean conscientes entre sí.

Durabilidad: datos comprometidos almacenados para siempre. Referencia tomada de este artículo:


5

Para citar Wikipedia :

ACID (atomicidad, consistencia, aislamiento, durabilidad) es un conjunto de propiedades que garantizan que las transacciones de la base de datos se procesen de manera confiable.

Un DBMS que admita transacciones se esforzará por admitir todas estas propiedades: cualquier DBMS comercial (así como varios DBMS de código abierto) brindan 'soporte' completo de ACID, aunque a menudo es posible (por ejemplo, con niveles de aislamiento variables en MSSQL) para disminuir la ACIDness, perdiendo así la garantía de un comportamiento completamente transaccional.


3

[Gray] introdujo las propiedades ACD para una transacción en 1981. En 1983 [Haerder] agregó la propiedad Isolation. En mi opinión, las propiedades de ACD tendrían un conjunto de propiedades más útil para discutir. Una interpretación de Atomicity (que la transacción debe ser atómica como se ve desde cualquier cliente en cualquier momento) implicaría la propiedad de aislamiento. La propiedad "aislamiento" es útil cuando la transacción no está aislada; cuando la propiedad de aislamiento es relajada. En ANSI SQL hablar: si el nivel de aislamiento es más débil, SERIALIZABLE. Pero cuando el nivel de aislamiento es SERIALIZABLE, la propiedad de aislamiento no es realmente de interés.

He escrito más sobre esto en una publicación de blog: "ACID no tiene sentido".

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[Gray] The Transaction Concept, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] Principios de recuperación de bases de datos orientados a transacciones, Haerder y Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

La transacción se puede definir como una colección de tareas que se consideran como unidad mínima de procesamiento. Cada unidad de procesamiento mínima no se puede dividir más.

Todas las transacciones deben contener cuatro propiedades que comúnmente se conocen como propiedades ACID. es decir, ACID son el grupo de propiedades de cualquier transacción.

  • Atomicidad:
  • Consistencia
  • Aislamiento
  • Durabilidad
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.