¿Cuáles son las garantías ACID en Azure Databricks?
Azure Databricks usa Delta Lake de forma predeterminada para todas las lecturas y escrituras y se basa en las garantías ACID proporcionadas por el protocolo Delta Lake de código abierto. ACID es el acrónimo en inglés para Atomicidad, Coherencia, Aislamiento y Durabilidad.
- Atomicidad significa que todas las transacciones se completan correctamente o todo lo contrario.
- Las garantías de coherencia se refieren al modo en que operaciones simultáneas observan un estado de los datos determinado.
- Aislamiento se refiere al modo en que las operaciones simultáneas entran en conflicto entre sí.
- Durabilidad significa que los cambios confirmados son permanentes.
Aunque muchas tecnologías de procesamiento y almacenamiento de datos describen tener transacciones ACID, las garantías específicas varían según el sistema y las transacciones en Azure Databricks pueden diferir de otros sistemas con los que ha trabajado.
Nota:
En esta página se describen las garantías para las tablas respaldadas por Delta Lake. Es posible que otros formatos de datos y sistemas integrados no proporcionen garantías de transacciones para lecturas y escrituras.
Todas las escrituras de Azure Databricks en el almacenamiento de objetos en la nube usan confirmaciones transaccionales, que crean archivos de metadatos que comienzan con _started_<id>
y _committed_<id>
junto con archivos de datos. No es necesario interactuar con estos archivos, ya que Azure Databricks limpia los archivos de metadatos de confirmación obsoletos de forma rutinaria.
¿Cuál es el ámbito de las transacciones en Azure Databricks?
Azure Databricks administra las transacciones en el nivel de tabla. Las transacciones siempre se aplican a una tabla cada vez. Para administrar transacciones simultáneas, Azure Databricks usa el control de simultaneidad optimista. Esto significa que no hay bloqueos en la lectura o escritura en una tabla, y el interbloqueo no es una posibilidad.
De forma predeterminada, Azure Databricks proporciona aislamiento de instantáneas en lecturas y aislamiento serializable de escritura en escrituras. El aislamiento serializable de escritura proporciona garantías más sólidas que el aislamiento de instantáneas, pero aplica ese aislamiento más sólido solo para escrituras.
Las operaciones de lectura que hacen referencia a varias tablas devuelven la versión actual de cada tabla en el momento del acceso, pero no interrumpen las transacciones simultáneas que podrían modificar las tablas a las que se hace referencia.
Azure Databricks no tiene construcciones BEGIN/END
que permitan agrupar varias operaciones como una sola transacción. Las aplicaciones que modifican varias tablas confirman transacciones en cada tabla en serie. Puede combinar inserciones, actualizaciones y eliminaciones en una tabla en una sola transacción de escritura mediante MERGE INTO
.
¿Cómo implementa Azure Databricks la atomicidad?
El registro de transacciones controla la atomicidad de confirmación. Durante una transacción, los archivos de datos se escriben en el directorio de archivos de respaldo de la tabla. Cuando se completa la transacción, se confirma una nueva entrada en el registro de transacciones que incluye las rutas de acceso a todos los archivos escritos durante la transacción. Cada confirmación incrementa la versión de la tabla y hace que los nuevos archivos de datos sean visibles para las operaciones de lectura. El estado actual de la tabla consta de todos los archivos de datos marcados como válidos en los registros de transacciones.
No se realiza un seguimiento de los archivos de datos a menos que el registro de transacciones registre una nueva versión. Si se produce un error en una transacción después de escribir archivos de datos en una tabla, dichos archivos no dañarán el estado de la tabla, pero no formarán parte de esta. La operación VACUUM
elimina todos los archivos de datos sin seguimiento en un directorio de tabla, incluidos los archivos sin confirmar restantes de transacciones con errores.
¿Cómo implementa Azure Databricks la durabilidad?
Azure Databricks usa el almacenamiento de objetos en la nube para almacenar todos los archivos de datos y registros de transacciones. El almacenamiento de objetos en la nube tiene alta disponibilidad y durabilidad. Dado que las transacciones se realizan correctamente o producen errores por completo y el registro de transacciones reside junto con los archivos de datos en el almacenamiento de objetos en la nube, las tablas de Azure Databricks heredan las garantías de durabilidad del almacenamiento de objetos en la nube en el que se almacenan.
¿Cómo implementa Azure Databricks la coherencia?
Delta Lake usa el control de simultaneidad optimista para proporcionar garantías transaccionales entre escrituras. En este sistema, las escrituras tienen tres fases:
- Lectura: se lee (si es necesario) la versión más reciente disponible de la tabla para identificar qué archivos deben modificarse (es decir, volver a escribir).
- Las escrituras que solo se anexan no leen el estado de la tabla actual antes de escribir. La validación de esquema aprovecha los metadatos del registro de transacciones.
- Escritura: se escriben archivos de datos en el directorio que se usa para definir la tabla.
- Validación y confirmación:
- se comprueba si los cambios propuestos están en conflicto con cualquier otro cambio que se haya confirmado simultáneamente desde la lectura de la instantánea.
- Si no hay ningún conflicto, todos los cambios "staged" se confirman como una nueva instantánea con versiones, y la operación de escritura se lleva a cabo correctamente.
- Si hay algún conflicto, se produce un error en la operación de escritura con una excepción de modificación simultánea. Este error evita daños en los datos.
La simultaneidad optimista da por sentado que la mayoría de las transacciones simultáneas de los datos no pueden entrar en conflicto entre sí, pero los conflictos son posibles. Consulte Niveles de aislamiento y conflictos de escritura en Azure Databricks.
¿Cómo implementa Azure Databricks el aislamiento?
Azure Databricks usa el aislamiento serializable de escritura de forma predeterminada para todas las escrituras y actualizaciones de tabla. El aislamiento de instantáneas se usa para todas las lecturas de tabla.
La serialización de escritura y el control de simultaneidad optimista funcionan conjuntamente para proporcionar alto rendimiento para las escrituras. El estado válido actual de una tabla siempre está disponible y se puede iniciar una escritura en una tabla en cualquier momento. Las lecturas simultáneas solo se ven limitadas por el rendimiento de los recursos en la nube y el metastore.
Consulte Niveles de aislamiento y conflictos de escritura en Azure Databricks.
¿Delta Lake es compatible con las transacciones de varias tablas?
Delta Lake no admite las transacciones de varias tablas. Delta Lake admite las transacciones en el nivel de tabla.
Las relaciones entre clave principal y clave externa en Azure Databricks son informativas y no se aplican. Vea Declaración de relaciones de clave principal y clave externa.
¿Qué significa que Delta Lake sea compatible con las operaciones de escritura en varios clústeres?
Delta Lake evita daños en los datos cuando varios clústeres escriben a la vez en la misma tabla. Algunas operaciones de escritura pueden entrar en conflicto durante la ejecución simultánea, pero no dañan la tabla. Consulte Niveles de aislamiento y conflictos de escritura en Azure Databricks.
¿Puedo modificar una tabla Delta desde diferentes áreas de trabajo?
Sí, puede modificar simultáneamente la misma tabla Delta desde diferentes áreas de trabajo. Además, si un proceso escribe desde un área de trabajo, los lectores de otras áreas de trabajo obtendrán una vista coherente.