¿Cuánto marketing hay en ACID?

Hola a todos. En contacto Vladislav Rodin. Actualmente soy el jefe del curso High Load Architect en OTUS, y también doy cursos sobre arquitectura de software.

Además de la enseñanza, como puede ver, he estado escribiendo para un blog de material de copyright OTUS Habré y el artículo de hoy quiero coincidir con el inicio del curso "Bases de datos" , que ahora está abierto.




Prefacio


Las transacciones aparecieron en los años 70 y se presentaron como una herramienta de base de datos para resolver los problemas de tolerancia a fallas y acceso a datos en un entorno competitivo. Luego, se formularon una serie de propiedades que una transacción debe poseer para cumplir con las tareas que se le asignaron, y las letras mayúsculas de estas propiedades, establecidas en el orden correcto, formaron el hermoso acrónimo ACID.

El período de tiempo durante el cual tuvieron lugar estos eventos se caracterizó por la ausencia de grandes cargas, Internet y problemas de rendimiento, que solo podían resolverse mediante métodos de escala vertical. Posteriormente, a principios de la década de 2000, apareció una tendencia en las bases de datos NoSQL, apareció la abreviatura BASE, que en realidad se oponía al ACID clásico (ACID - ácido, BASE - álcali). Ahora hay una tendencia inversa para ACID. Incluso MongoDB de NoSQL ahora es compatible con ACID.

Veamos qué significa esta abreviatura y cuánto marketing tiene.

ACID representa 4 propiedades:

A = atomicidad
C = consistencia
I = aislamiento
D = durabilidad

Ahora hablemos de cada propiedad por separado.

A = atomicidad


La atomicidad es un término sobrecargado y en el contexto de las transacciones en una base de datos puede formularse como el principio de "todo o nada". Si su transacción contiene 10 operaciones de inserción, se ejecutarán las 10 (se realizarán transacciones de confirmación), o ninguna de ellas (se realizarán transacciones de reversión).

¿Cómo se proporciona esta propiedad? El hecho es que cuando una transacción que contiene las mismas 10 inserciones llega a la base de datos, los datos no comienzan a cambiar. Antes de una transacción, la transacción se escribe directamente en los datos en un registro, en el que se registran los cambios realizados. Este diario también se puede usar para replicar datos, o puede no estar completamente relacionado con él, como he descrito, por ejemplo, aquí. Gracias a este diario, las transacciones pueden confirmarse directamente a los datos o, en cuyo caso, revertirlos. La regla de que una transacción debe cerrarse lo antes posible se deriva directamente de la comprensión de los principios para implementar esta propiedad: las bases de datos a menudo tienen prohibido limpiar este registro mientras una transacción está abierta, por lo que puede obstruirse, lo que, a su vez, tiene consecuencias muy desagradables.

C = consistencia (consistencia o integridad)


En términos de ACID, la consistencia no significa lo mismo que en términos del teorema CAP (en la teoría de sistemas distribuidos, hay muchos grados de esta consistencia). Por coherencia queremos decir lo siguiente: algunos invariantes predefinidos del sistema deben ejecutarse tanto antes como después de la transacción de confirmación. Se pueden representar ejemplos de invariantes del sistema: el débito converge con el préstamo, el salario total de los empleados no excede el presupuesto, el número de empleados en la empresa es igual al número de vacantes abiertas anteriormente, etc. En el lenguaje de la base de datos, esto significa solo el cumplimiento de todas las restricciones.

La pregunta sobre la necesidad de coherencia a nivel de la base de datos es bastante controvertida, porque la presencia de restricciones puede indicar que parte de la lógica de negocios se ha movido de la aplicación al nivel de la base de datos, lo que no se reconoce universalmente como una buena práctica. Al final, la propia aplicación puede decidir no confirmar datos no válidos. Existe la opinión de que la coherencia se agregó solo para hacer que la abreviatura sea hermosa (marketing).

I = aislamiento


El aislamiento es una propiedad de la base de datos que permite que las transacciones paralelas se ejecuten como secuenciales. Después de todo, nadie prohíbe que la base de datos realice varias transacciones al mismo tiempo, es necesario asegurarse de que no se afecten entre sí, para que no ocurran anomalías del tipo de condición de carrera. De hecho, es el aislamiento lo que resuelve el problema del acceso a datos en un entorno competitivo.

La divulgación del concepto de aislamiento debido a su volumen merece un artículo separado., porque precisamente el aislamiento puede llamarse el corazón de ACID. El precio de la transaccionalidad a menudo se reduce al precio de garantizar el aislamiento, por lo que el aislamiento tiene diferentes niveles, cada uno de los cuales proporciona su propio nivel de protección contra las condiciones de carrera y conlleva una u otra sobrecarga. El aislamiento está totalmente garantizado solo en el nivel serializable, que es muy difícil de implementar y que rara vez se necesita.

D = durabilidad


La durabilidad nos dice que si se ha aplicado una transacción, de ninguna manera debería desaparecer. De hecho, esto significa lo siguiente: si la base de datos respondió que se había confirmado una transacción, la transacción se confirmó en la memoria no volátil. Esto significa que se produjo la llamada al sistema fsync, es decir, los buffers se volcaron al disco duro y respondió que estaba bien.

La durabilidad también es un término de marketing, porque no se puede proporcionar por completo. Incluso si descartamos los escenarios artificiales de "quemar la Tierra por extraterrestres", después de lo cual no habrá bases de datos o transacciones, escenarios más probables pero extremos de destrucción física de un disco duro particular en el que se grabó la transacción, podemos recordar que el sistema fsync garantiza las llamadas golpear un disco duro en el controlador, que, a su vez, todavía contiene un búfer volátil. El tiempo que pasa en él es corto, pero no igual a 0. Como resultado, si apaga la electricidad exactamente en el momento "correcto", ¡la transacción aún puede perderse!

Aunque el problema con fsync se ha resuelto en una costosa base de datos Oracle, nada puede protegernos de los problemas asociados con la destrucción física de la máquina. Solo podemos aumentar las garantías utilizando copias de seguridad y replicación .

recomendaciones


A pesar de que ACID proporciona propiedades bastante interesantes, como la atomicidad y el aislamiento, algunas de estas propiedades son solo de marketing, e incluso conocidas por su rigor en comparación con BASE, ACID no garantiza por completo la ausencia de oportunidades de pérdida de transacciones, así como el impacto de los resultados realizar transacciones simultáneas entre sí (¡el aislamiento aún debe configurarse!).


Invitamos a todos a una lección gratuita sobre el tema: "Un modelo para trabajar con datos en PostgreSQL" .



All Articles