Conceptos básicos: ¿Qué es el cumplimiento de ACID?
Al realizar operaciones en base de datos (como agregar nuevos registros, nuevos campos o actualizar los ya existentes), los datos deben tratarse con mucho cuidado. Un método para garantizarlo es el cumplimiento de ACID, o ACID compliance en inglés. ACID es el acrónimo para Atomicidad (Atomicity), Consistencia (Consistency), Aislamiento (Isolation) y Durabilidad (Durability), acuñado por Andreas Reuter y Theo Härder, y basado en el trabajo previo de Jim Gray.
De esta manera, ACID representa un grupo de directrices que deberían ayudarte a garantizar que las operaciones en la base de datos se realicen de forma confiable. Además, las bases de datos se pueden mantener con integridad y seguridad.
- La atomicidad, en este contexto, significa que solo hay dos resultados posibles para las transacciones en la base de datos: se completa con éxito o no existe ninguna operación. Esto garantiza que los datos se procesen correctamente o que la base de datos vuelva a su estado anterior, sin que los datos se corrompan.
- La consistencia de una transacción de datos implica que los mismos siempre estarán en un estado válido. Esto quiere decir que no se violarán las restricciones impuestas al conjunto de datos. Si no se mantiene la consistencia, la operación fallará y la base de datos volverá al estado anterior válido.
- El aislamiento significa que otras operaciones simultáneas que se realizan sobre el mismo grupo de datos no deben verse afectadas por la operación actual.
- La durabilidad de los datos representa el hecho de que las operaciones realizadas con éxito serán permanentes. Ningún fallo de la base de datos o desconexión imprevista corromperá los datos.
Delta Lake mejora un motor ya potente como Apache Spark
Apache Spark se define como “un motor multi lenguajes para ejecutar ingeniería de datos, Data Science y Machine Learning de un solo nodo o clústeres”.
Apache Spark sirve como una herramienta que facilita el procesamiento de datos a gran escala para las empresas, pero no es compatible con las directrices de ACID. Esto significa que cada uno de los principios que discutimos antes puede ser quebrantado si no se tiene cuidado al programar. Incluso si tomas todas las medidas que se te ocurran, pueden surgir problemas y datos corruptos que podrían contaminar tu data lake. En ciertos escenarios, incluso podrían eliminarse permanentemente parte de los datos en un trabajo de procesamiento deficiente. La integridad de los datos queda en manos del equipo de programación, y todos somos humanos.
Debido a estos problemas, Apache Delta Lake surge como un nuevo paradigma. Se trata de un framework de almacenamiento de código abierto que brinda soporte de transacciones con cumplimiento de los principios ACID, además de aplicación de restricciones a data lakes controlados por Apache Spark. Delta Lake permite a los usuarios construir una arquitectura “Data Lakehouse” que funciona con datos estructurados, semiestructurados y no estructurados.
Este Data Lakehouse es eficiente para escalar de tamaño, pero también es confiable, ya que garantiza la integridad de los datos. Delta Lake te permite revertir su ecosistema a versiones anteriores de los datos para auditorías u otras necesidades. Adicionalmente, registra todos los detalles de las transacciones, lo que proporciona un historial para auditoría.
Delta Lake ayuda a tu organización a refinar los datos
En cada etapa que se muestra en el gráfico anterior, los datos se mejoran gradualmente. Esto ocurre a través de un pipeline que permite tanto el procesamiento en lotes como el de datos tipo stream, mediante un sistema de archivos compartidos. Los datos se organizan en 3 capas o tablas, comúnmente conocidas como Bronce o Bronze (tabla 1), Plata o Silver (tabla 2) y Oro o Gold (tabla 3).
- Las tablas en el nivel Bronce almacenan los datos en bruto, sin modificar de su fuente (datos de IOT, archivos JSON, archivos PARQUET, etc.). Los datos originales pueden ser reprocesados en el futuro o también pueden ser utilizados por otros motores de procesamiento.
- Las tablas en el nivel Plata incorporan una vista más refinada de los datos de tu organización. Se puede consultar directamente y los datos pueden considerarse limpios. Se puede comenzar a tomar decisiones basadas en estos datos más refinados.
- Las tablas en el nivel Oro tienen datos agregados a nivel de negocio y se pueden usar para construir análisis. Los dashboards y presentaciones se crean a partir de este tipo de datos.
¿Cómo facilita Delta Lake el cumplimiento de ACID en Apache Spark?
“El registro (log) de transacciones es el mecanismo a través del cual Delta Lake es capaz de ofrecer la garantía de la atomicidad. Para todos los efectos, si algo no existe en el registro de transacciones, nunca sucedió”. Es así como un post de Databricks describe a fondo el registro de transacciones de Delta Lake.
Cuando se procesan datos con Delta Lake, uno de los pasos de la transacción es comprobar si hay una falta de coincidencia de esquema al validar el resultado de un proceso. Este error podría ocurrir en cualquier momento, por lo que comprobar cada transacción ayuda con la consistencia de los datos y asegura que no se obtendrán tablas con datos corruptos. Esto también es ideal para la depuración del sistema.
Como dijimos anteriormente, cada trabajo realizado en Delta Lake se registra y también se guardan versiones de datos válidos. De esta manera, Delta Lake garantiza que los datos sean duraderos en el sistema, al tiempo que proporciona un historial de registros. Cualquier dato antiguo es accesible para que puedas consultarlo, o datos que ya han sido transformados por otros procesos, en su estado anterior.
El registro de transacciones también es clave para el principio de aislamiento que se debe seguir en Delta Lake. Un trabajo de lectura o escritura se hará con los datos más recientes que ya han sido confirmados, sin tener en cuenta los procesos que se están realizando simultáneamente, pero que aún no han terminado o no han sido registrados.Delta Lake es una gran herramienta para incorporar a tus proyectos de procesamiento de datos, especialmente cuando deseas que tus bases de datos estén en conformidad con los principios ACID, o ACID compliant. Si has decidido usar Apache Spark, entonces usar Delta Lake debe ser obvio, ya que está completamente integrado para trabajar en conjunto con Spark.