curso
¿Qué son las transacciones ACID? Guía completa para principiantes
Imagina a un cliente llamando, confuso porque su dinero se dedujo pero nunca se abonó al destinatario, o un pedido se realizó sin actualizar el inventario. Estos problemas se producen cuando no se aplica la integridad de los datos. Ahí es donde entran en juego los principios ACID.
Los principios ACID se aplican para garantizar que cada transacción se procesa de forma fiable, manteniendo los datos seguros y los sistemas funcionando sin problemas. Comprender estos principios es clave para construir sistemas fiables y tolerantes a fallos.
En esta guía aprenderás
- Por qué son importantes las transacciones ACID.
- Cómo garantizan el buen funcionamiento de los sistemas de bases de datos.
- Ejemplos reales de su uso.
- Buenas prácticas para trabajar con ellos.
¡Vamos a ello!
¿Qué son las Transacciones ACID?
Las transacciones ACID se refieren a cuatro propiedades que garantizan el procesamiento fiable de las transacciones de la base de datos. Los cuatro principios son:
- Atomicidad
- Consistencia
- Isolación
- Durabilidad
Estos principios garantizan que las transacciones se ejecuten completamente, sin actualizaciones parciales ni corrupción de datos, incluso en caso de fallos del sistema. Las transacciones ACID son críticas en escenarios donde la integridad de los datos es primordial.
En las transacciones bancarias, ACID garantiza que el dinero se transfiere totalmente o no se transfiere en absoluto, evitando problemas como las transferencias parciales o las deducciones dobles. En el comercio electrónico, los principios ACID garantizan que los pedidos de los clientes se procesen correctamente, los pagos se completen y las actualizaciones de inventario reflejen los niveles de existencias en tiempo real. Del mismo modo, en los sistemas de gestión de inventarios, ACID mantiene la coherencia evitando las discrepancias de existencias debidas a transacciones concurrentes.
Desglose de las propiedades ACID
Cada una de las cuatro propiedades que componen los principios ACID aborda un aspecto específico de la gestión de transacciones.
Exploremos estas propiedades para comprender cómo contribuyen a la solidez de los sistemas de bases de datos.
Atomicidad
La atomicidad garantiza que una transacción se trate como una unidad única e indivisible. Esto significa que todas las operaciones de una transacción deben completarse o no completarse. Si falla alguna parte de la transacción, el sistema retrocede toda la transacción, garantizando que no se produzcan actualizaciones parciales.
Ejemplo: En una transacción bancaria, la atomicidad garantiza que ambas operaciones se completen con éxito cuando se carga dinero en una cuenta y se abona en otra. Si falla el cargo o el abono, la operación se anula por completo.
Coherencia
La coherencia garantiza que una transacción lleve a la base de datos de un estado válido a otro, respetando unas reglas o restricciones predefinidas. Tras completar una transacción, los datos deben cumplir todas las reglas de integridad de la base de datos.
Ejemplo: En banca, la coherencia garantiza que el saldo total de todas las cuentas permanece invariable tras una transferencia. Por ejemplo, si se transfieren 100$ entre cuentas, la suma de los saldos de ambas cuentas sigue siendo la misma para preservar las reglas contables.
Aislamiento
El aislamiento impide que las transacciones interfieran entre sí. Cuando se ejecutan varias transacciones simultáneamente, el aislamiento garantiza que no afecten a los resultados de las demás. Cada transacción debe estar aislada para evitar conflictos, especialmente en entornos de alta concurrencia.
Ejemplo: Si dos clientes intentan comprar el último artículo en stock al mismo tiempo, el aislamiento garantiza que sólo una transacción tendrá éxito, y el inventario se actualizará correctamente para reflejar el cambio.
Durabilidad
La durabilidad garantiza que, una vez finalizada una transacción, sus cambios se almacenan permanentemente en la base de datos (aunque el sistema se bloquee inmediatamente después). Esto garantiza que los datos permanezcan intactos y accesibles tras los fallos.
Ejemplo: En un sistema de comercio electrónico, la durabilidad garantiza que los datos del pedido se guarden en la base de datos después de que un cliente complete una compra. Aunque el servidor se bloquee instantes después, el registro de compra permanece intacto y puede recuperarse cuando se restaure el sistema.
Propiedades ácidas. Imagen del autor
Transacciones ACID en bases de datos relacionales
La mayoría de las bases de datos relacionales se basan en los principios ACID. Esto significa que están diseñados para mantener la precisión y fiabilidad de los datos.
En esta sección, vamos a explorar cómo implementan las bases de datos las propiedades ACID.
Para los que se inician en las bases de datos relacionales, este curso de Introducción a las Bases de Datos Relacionales en SQL es perfecto para construir una base sólida.
Cómo se implementa ACID en las bases de datos SQL
Las bases de datos SQL tradicionales hacen cumplir las propiedades ACID mediante mecanismos de control de transacciones, como los comandos SQL como BEGIN
, COMMIT
, y ROLLBACK
. Estos comandos gestionan las transacciones, mientras que los registros de transacciones y los bloqueos garantizan la integridad de los datos.
Por ejemplo:
- La atomicidad se gestiona mediante
ROLLBACK
en caso de error, evitando actualizaciones parciales. - La coherencia se aplica mediante restricciones (por ejemplo, claves externas, claves únicas) para mantener la integridad de los datos.
- El aislamiento se implementa mediante bloqueos para evitar conflictos entre transacciones concurrentes.
- La durabilidad se consigue mediante la persistencia de las transacciones, garantizando que no se pierdan una vez confirmadas, incluso en caso de fallo.
Cumplimiento de ACID en diferentes sistemas de bases de datos
La mayoría de las bases de datos SQL vienen con la conformidad ACID incorporada para mantener la integridad transaccional. Sistemas como MySQL, PostgreSQL, Oracle y Microsoft SQL Server utilizan registros de transacciones (por ejemplo, Write-Ahead Logging en PostgreSQL) y protocolos de bloqueo (por ejemplo, bloqueo en dos fases) para hacer cumplir las propiedades ACID. Estos mecanismos ayudan a preservar la integridad de los datos en cada transacción.
Más concretamente:
- MySQL: Utiliza el motor de almacenamiento InnoDB, que admite transacciones compatibles con ACID. Gestiona la atomicidad y la durabilidad mediante un redo log que puede revertir las transacciones fallidas y recuperar las confirmadas.
- PostgreSQL: Aprovecha el registro de escritura anticipada (WAL) para garantizar la durabilidad y la coherencia, registrando los cambios en un registro antes de aplicarlos a la base de datos.
- Oráculo: Utiliza segmentos de retroceso y registros de deshacer para garantizar la atomicidad y la durabilidad, proporcionando un sólido control de las transacciones.
¿Trabajas con SQL Server? Este curso sobre Transacciones y Tratamiento de Errores en SQL Server es una forma estupenda de dominar el control de las transacciones y garantizar la integridad de los datos.
Ejemplo de transacción SQL con cumplimiento de ACID
Aquí tienes un sencillo ejemplo SQL de una transacción en PostgreSQL que se adhiere a los principios ACID.
Este ejemplo demuestra la transferencia de dinero entre dos cuentas para garantizar que la transacción se completa totalmente o retrocede totalmente en caso de fallo:
BEGIN;
-- Step 1: Debit $500 from Account A
UPDATE accounts
SET balance = balance - 500
WHERE account_id = 'A';
-- Step 2: Credit $500 to Account B
UPDATE accounts
SET balance = balance + 500
WHERE account_id = 'B';
-- Commit the transaction if both steps succeed
COMMIT;
-- Rollback the transaction if an error occurs
ROLLBACK;
En esta transacción:
- Si alguna de las actualizaciones falla, la transacción se anulará.
- La base de datos sigue siendo válida, ya que el saldo total de ambas cuentas no cambia.
- Si otra transacción intenta modificar estas cuentas simultáneamente, el bloqueo garantiza que una se complete antes que la otra.
- Una vez confirmada la transacción, los cambios se guardan permanentemente, incluso si el sistema se bloquea después.
Si te estás iniciando en SQL, este curso de Introducción a SQL te ayudará a comprender los fundamentos y a empezar a escribir consultas con confianza.
ACID vs. Transacciones BASE en bases de datos NoSQL
Aunque las transacciones ACID han sido durante mucho tiempo la norma de oro para garantizar la integridad de los datos en las bases de datos relacionales, las bases de datos NoSQL suelen priorizar la flexibilidad y la escalabilidad sobre la estricta coherencia transaccional. Este cambio ha llevado a adoptar BASE como alternativa a ACID en determinados casos de uso.
Exploremos BASE, sus diferencias con ACID y cuándo es preferible cada enfoque.
¿Qué es BASE?
BASE es el acrónimo de Básicamente Disponible, Estado Suave, Consistencia Eventual. Define un conjunto de propiedades diseñadas para las bases de datos NoSQL, centrándose en la disponibilidad y la flexibilidad por encima de la coherencia estricta.
Definamos los principios:
- Básicamente disponible: El sistema garantiza la disponibilidad, lo que significa que responderá a las solicitudes aunque algunas partes del sistema estén averiadas o sean inaccesibles.
- Estado blando: Debido a las actualizaciones asíncronas, el estado del sistema puede cambiar con el tiempo, incluso sin entrada de datos.
- Coherencia final: Los datos acabarán siendo coherentes, pero puede haber periodos en los que sean temporalmente incoherentes.
Diferencias entre ACIDO y BASE
Las principales diferencias entre ACID y BASE giran en torno a las compensaciones realizadas en términos de coherencia, disponibilidad y rendimiento:
Coherencia
ACID garantiza que la base de datos sea siempre coherente después de una transacción, con reglas estrictas para mantener la integridad de los datos. Por otra parte, BASE sacrifica la coherencia estricta en favor de la disponibilidad y el rendimiento. Esto permite incoherencias temporales hasta que el sistema alcanza finalmente un estado coherente.
Disponibilidad
Los sistemas ACID priorizan la consistencia y la durabilidad sobre la disponibilidad, por lo que pueden dejar de estar disponibles durante determinados fallos. Los sistemas BASE están diseñados para una alta disponibilidad. Esto garantiza que el sistema siga respondiendo incluso durante las particiones o fallos de la red.
Escalabilidad
Los sistemas ACID pueden enfrentarse a retos cuando se escalan horizontalmente a través de sistemas distribuidos, ya que mantener una coherencia estricta puede consumir muchos recursos. Los sistemas BASE son más escalables y a menudo se construyen para escalar horizontalmente y manejar grandes volúmenes de datos y tráfico, con menos énfasis en la coherencia inmediata.
Casos prácticos para ACID y BASE
Las transacciones ACID son ideales cuando la consistencia de los datos es crítica, por ejemplo:
- Operaciones financieras: La precisión y la coherencia son cruciales a la hora de transferir dinero o procesar pagos.
- Sistemas de inventario: Garantizar que los niveles de existencias se actualizan con precisión es vital para evitar sobreventas o discrepancias.
- Tramitación del pedido: Para satisfacer a los clientes en el comercio electrónico, los pedidos deben procesarse de forma correcta y coherente.
Se prefieren las transacciones BASE cuando la escalabilidad, la alta disponibilidad y el rendimiento superan la necesidad de una coherencia estricta, por ejemplo:
- Redes sociales: La coherencia de los datos es menos crítica, y las incoherencias temporales en las publicaciones o los "me gusta" son aceptables siempre que el sistema siga respondiendo.
- Redes de distribución de contenidos: Servir contenidos a los usuarios con una latencia mínima es prioritario sobre la coherencia.
ÁCIDO vs BASE: Una tabla comparativa
Función |
ACID |
BASE |
Formulario completo |
Atomicidad, Coherencia, Aislamiento, Durabilidad |
Básicamente Disponible, Estado blando, Eventualmente consistente |
Principio básico |
Garantiza transacciones fiables y coherentes |
Prioriza la disponibilidad y el rendimiento sobre la coherencia estricta |
Modelo de coherencia |
Coherencia estricta |
Coherencia final |
Integridad de los datos |
Alto - Garantiza la integridad de los datos en todo momento |
Inferior - Permite incoherencias temporales |
Gestión de transacciones |
Las transacciones deben completarse o no completarse en absoluto |
Transacciones de mejor esfuerzo: pueden ser incompletas o incoherentes temporalmente |
Escalabilidad |
Limitado - Funciona mejor con bases de datos relacionales monolíticas o tradicionales |
Alto - Diseñado para sistemas distribuidos y escalables |
Latencia |
Mayor - Debido a los estrictos requisitos de coherencia |
Inferior - Permite tiempos de respuesta más rápidos |
Casos prácticos |
Transacciones financieras, gestión de inventarios, procesamiento de pedidos |
Plataformas de medios sociales, análisis en tiempo real, redes de distribución de contenidos |
Si tienes curiosidad por saber cómo se aplican los principios BASE en las bases de datos NoSQL, consulta este curso de Conceptos NoSQL: es un buen punto de partida para comprender las ventajas y desventajas.
Desafíos comunes de las transacciones ACID
Implantar transacciones ACID no está exento de dificultades. Estos retos son especialmente evidentes en entornos con muchas transacciones, sistemas distribuidos y cuando se gestionan transacciones concurrentes.
En esta sección, nos sumergiremos en los principales problemas a los que nos enfrentamos cuando trabajamos con transacciones ACID.
Costes de rendimiento de las transacciones ACID
Una de las principales compensaciones al utilizar transacciones ACID es el rendimiento. Garantizar la atomicidad, la coherencia y la durabilidad tiene un coste, sobre todo cuando la base de datos maneja grandes volúmenes de transacciones.
Los requisitos para mantener estas propiedades pueden ralentizar las operaciones de las siguientes maneras:
- La atomicidad requiere que todos los pasos de una transacción se ejecuten como una sola unidad, lo que significa que el sistema debe garantizar que si falla una parte de la transacción, se retroceda toda la transacción. Este proceso de reversión puede consumir muchos recursos.
- La coherencia exige que las transacciones lleven siempre la base de datos a un estado válido, lo que a menudo implica comprobar restricciones, disparadores y reglas de negocio. Estas comprobaciones adicionales pueden aumentar el tiempo de procesamiento de cada transacción.
- La durabilidad garantiza que los cambios se guarden permanentemente una vez que se confirma una transacción, lo que a menudo requiere escrituras en varias ubicaciones, incluidos los registros de transacciones y el almacenamiento en disco. Este proceso de almacenamiento persistente puede ralentizar el rendimiento global del sistema.
A medida que aumenta el volumen de transacciones, estos procesos pueden provocar cuellos de botella que limiten la escalabilidad y capacidad de respuesta del sistema.
Dificultad para escalar bases de datos compatibles con ACID en sistemas distribuidos
Los principios ACID están diseñados tradicionalmente para sistemas de un solo nodo o centralizados, donde la integridad de los datos y la coherencia transaccional son más fáciles de gestionar. Sin embargo, a medida que las bases de datos crecen en escala -especialmente en clusters distribuidos geográficamente-, mantener las propiedades ACID se vuelve más complejo.
- Transacciones distribuidas: En un entorno distribuido, las transacciones pueden abarcar varios nodos o ubicaciones. Garantizar que todos los nodos participantes están de acuerdo en el resultado de una transacción puede ser difícil, sobre todo cuando se producen latencias o particiones de la red. A menudo se utilizan técnicas como el protocolo de confirmación en dos fases, pero pueden añadir sobrecarga y complejidad.
- Replicación de datos: Las bases de datos compatibles con ACID suelen replicar los datos en varios servidores para garantizar su durabilidad. Sin embargo, sincronizar estos datos y garantizar que todas las réplicas sean coherentes puede ser lento y consumir muchos recursos. Los retrasos en la red y los fallos del servidor pueden complicar aún más la coherencia de los datos replicados.
El escalado de bases de datos compatibles con ACID requiere una gestión cuidadosa de la coherencia y la durabilidad en todos los nodos, lo que resulta problemático (sobre todo para sistemas muy dinámicos o distribuidos globalmente).
Gestionar transacciones concurrentes preservando el aislamiento
Las transacciones concurrentes plantean otro reto para las bases de datos conformes con ACID en entornos multiusuario. El aislamiento garantiza que las transacciones concurrentes no interfieran entre sí, pero conseguirlo requiere mecanismos para gestionar y controlar el acceso a los datos.
El método más común de gestionar la concurrencia es mediante mecanismos de bloqueo, pero éstos conllevan sus propios retos:
- Bloqueo: Las bases de datos emplean bloqueos (por ejemplo, bloqueos a nivel de fila y a nivel de tabla) para evitar que transacciones conflictivas accedan simultáneamente a los mismos datos. El bloqueo garantiza el aislamiento, pero puede provocar bloqueos, cuando dos o más transacciones esperan a que la otra libere los bloqueos.
- Contención de bloqueo: Los altos niveles de concurrencia pueden llevar a la contención de bloqueos, donde las transacciones se bloquean frecuentemente unas a otras, ralentizando el sistema en general. A medida que aumenta el número de transacciones, la gestión de los bloqueos se hace más compleja y puede afectar negativamente al rendimiento.
- Reversión de la transacción: Si se produce un bloqueo o se detecta un conflicto, puede ser necesario revertir una de las transacciones, lo que supone un desperdicio de recursos y una reducción del rendimiento.
Buenas prácticas para trabajar con transacciones ACID
Aplicar las mejores prácticas puede beneficiar significativamente la longevidad de tu sistema en sistemas de gran volumen o entornos complejos.
He aquí algunas prácticas clave para trabajar eficazmente con transacciones ACID.
Implementar una gestión adecuada de las transacciones
Una de las mejores prácticas más importantes es realizar transacciones sólo cuando sea necesario. Sí, las propiedades ACID son esenciales para las operaciones que requieren integridad de los datos, pero utilizar transacciones para cada operación de la base de datos puede introducir una sobrecarga innecesaria y cuellos de botella en el rendimiento.
- Minimiza el alcance de la transacción: Restringe el alcance de cada transacción a las operaciones críticas que requieran absolutamente atomicidad y coherencia. Evita envolver operaciones innecesarias de sólo lectura.
- Utiliza transacciones más pequeñas: Si es posible, divide las operaciones más grandes y complejas en operaciones más pequeñas. Esto puede reducir la cantidad de trabajo realizado por transacción.
- Comprométete o retrocede rápidamente: Asegúrate siempre de que las transacciones se consignan o revierten lo antes posible para liberar recursos y evitar bloqueos de larga duración.
Básicamente, la clave es centrarse sólo en las operaciones críticas. Esto asegurará la integridad de tu base de datos sin incurrir en una sobrecarga excesiva.
Optimizar para la concurrencia
Optimizar las configuraciones de la base de datos y aplicar controles de concurrencia es esencial para mantener el rendimiento, garantizando al mismo tiempo que varias transacciones puedan ejecutarse simultáneamente sin comprometer la propiedad de aislamiento.
- Niveles de aislamiento de las transacciones: Elige el nivel de aislamiento adecuado en función de las necesidades de tu aplicación. Por ejemplo,
READ COMMITTED
es adecuado para muchas aplicaciones, peroSERIALIZABLE
puede ser necesario para escenarios en los que sea necesario un aislamiento estricto. Ten en cuenta que los niveles de aislamiento más altos pueden aumentar la contención y reducir el rendimiento. - Mecanismos de bloqueo: Configura correctamente los mecanismos de bloqueo para garantizar la integridad de los datos, permitiendo al mismo tiempo altos niveles de concurrencia. Por ejemplo, el bloqueo a nivel de fila (en lugar del bloqueo a nivel de tabla) puede ayudar a evitar cuellos de botella cuando varias transacciones intentan acceder a los mismos datos.
- Control optimista de la concurrencia: En algunos casos, puedes implementar un control de concurrencia optimista para evitar el bloqueo por completo. Este enfoque asume que los conflictos serán raros y sólo valida los datos en el momento de la confirmación, lo que puede ser más eficiente que bloquear los registros durante la transacción.
Optimizar la concurrencia salvaguarda tu sistema y lo mantiene receptivo (incluso cuando maneja transacciones simultáneas).
Supervisa y registra las transacciones
La supervisión y el registro deben realizarse para mantenerte informado de la salud y eficacia de tu sistema de base de datos.
- Controla el rendimiento de las transacciones: Utiliza herramientas para seguir el rendimiento de las transacciones en tiempo real. Busca consultas lentas, bloqueos excesivos o retrocesos frecuentes, que podrían indicar problemas de gestión de transacciones o de configuración de la base de datos.
- Registra errores y excepciones: Asegúrate de que todos los fallos, retrocesos y conflictos en las transacciones se registran para su posterior análisis. Esto ayuda a identificar problemas recurrentes, solucionar problemas y hacer mejoras.
- Analiza el rendimiento de las transacciones: Haz un seguimiento del número de transacciones que se procesan y evalúa si el sistema gestiona la carga con eficacia. Si el número de transacciones supera lo que el sistema puede soportar, puede que tengas que optimizar tu configuración o distribuir la carga de forma más uniforme.
Una supervisión y un registro eficaces te permiten gestionar tu base de datos de forma proactiva. Cuanto más conozcas tu sistema de base de datos, más podrás actualizarlo para asegurarte de que sigue satisfaciendo las demandas de tu aplicación.
Conclusión
En este artículo, hemos explorado los principios críticos de las transacciones ACID. Discutimos la importancia de estas propiedades en escenarios como las transacciones financieras, los pedidos de comercio electrónico y los sistemas de inventario, y destacamos cómo se implementan en bases de datos SQL populares.
Además, examinamos las diferencias entre las transacciones ACID y BASE, los retos de escalar sistemas compatibles con ACID y las mejores prácticas para gestionar las transacciones de forma eficiente.
Si quieres profundizar en cómo funcionan las transacciones ACID en PostgreSQL, te recomiendo encarecidamente este curso sobre Transacciones y Tratamiento de Errores en PostgreSQL.
Conviértete en Ingeniero de Datos
Preguntas frecuentes
¿Cómo funcionan las transacciones ACID en las bases de datos distribuidas?
En las bases de datos distribuidas, lograr un cumplimiento estricto de ACID puede ser un reto debido a los retrasos de la red y a los problemas de partición. Tecnologías como Two-Phase Commit (2PC) y Three-Phase Commit (3PC) ayudan a coordinar las transacciones entre varios nodos, garantizando la coherencia. Sin embargo, introducen latencia y posibles cuellos de botella, por lo que algunas bases de datos distribuidas prefieren BASE a ACID. Los enfoques más recientes, como Spanner y CockroachDB de Google, utilizan protocolos de consenso distribuido como Paxos o Raft para mantener una coherencia sólida a la vez que escalan globalmente.
¿Se puede optimizar el rendimiento de las transacciones ACID?
Sí, las optimizaciones de rendimiento para las transacciones ACID incluyen:
- Operaciones de dosificación: Agrupar varias escrituras en una sola transacción reduce la sobrecarga.
- Utilizar los índices con eficacia: Optimizar las consultas con una indexación adecuada minimiza la duración de las transacciones.
- Control optimista de la concurrencia: Reduce la contención de bloqueos asumiendo que las transacciones no entrarán en conflicto y validando en el momento de la confirmación.
- Ajuste de los niveles de aislamiento: Los niveles de aislamiento más bajos (por ejemplo, Lectura Comprometida en lugar de Serializable) pueden mejorar el rendimiento a la vez que equilibran las necesidades de coherencia.
¿Cuál es la diferencia entre las transacciones ACID y las operaciones idempotentes?
Las transacciones ACID garantizan que cada transacción se ejecute exactamente una vez y se complete por completo (o se retroceda por completo). En cambio, las operaciones idempotentes garantizan que las ejecuciones repetidas produzcan el mismo resultado sin efectos secundarios no deseados. Por ejemplo, actualizar un registro (UPDATE users SET balance = 100 WHERE id = 1
) es idempotente, pero incrementar un saldo (UPDATE users SET balance = balance + 100 WHERE id = 1
) no es idempotente a menos que esté envuelto en una transacción ACID para evitar condiciones de carrera.
¿Cómo equilibran las bases de datos modernas los principios ACID y BASE?
Muchas bases de datos modernas aplican un enfoque híbrido, ofreciendo una coherencia fuerte donde se necesita y una coherencia eventual donde se prioriza la escalabilidad.
- Las bases de datos NewSQL como Google Spanner, CockroachDB y YugabyteDB utilizan arquitecturas distribuidas manteniendo el cumplimiento de ACID.
- MongoDB y Cassandra siguen principalmente BASE, pero ofrecen soporte transaccional para operaciones multidocumento.
- Las bases de datos como PostgreSQL admiten la replicación lógica y las configuraciones multimaestro para ofrecer alta disponibilidad sin sacrificar totalmente las garantías ACID.
¿Cuáles son las compensaciones entre las transacciones ACID y las arquitecturas basadas en eventos?
En las arquitecturas basadas en eventos, los microservicios suelen comunicarse a través de registros de eventos (por ejemplo, Kafka) en lugar de transacciones ACID estrictas. Las compensaciones incluyen:
- Escalabilidad: Los sistemas basados en eventos escalan horizontalmente, mientras que las transacciones ACID introducen contención y bloqueo.
- Coherencia: ACID garantiza una coherencia fuerte, mientras que los sistemas basados en eventos favorecen la coherencia eventual.
- Complejidad: Las arquitecturas basadas en eventos requieren idempotencia, deduplicación de mensajes y procesamiento exactamente una vez para evitar problemas que las transacciones ACID manejan de forma natural.
- Resiliencia: ACID garantiza la durabilidad mediante registros transaccionales, mientras que los sistemas basados en eventos mantienen la fiabilidad mediante mecanismos como el aprovisionamiento de eventos y los patrones de saga.

¡Aprende más sobre ingeniería de datos y bases de datos con estos cursos!
curso
Introducción a las bases de datos relacionales en SQL
programa
Ingeniero de Datos Asociado
blog
¿Qué es una base de datos de grafos? Guía para principiantes
blog
¿Qué es la gestión de datos? Guía práctica con ejemplos

Tim Lu
12 min

blog
Las 85 mejores preguntas y respuestas de entrevistas SQL para 2025
tutorial
Base de datos Azure SQL: Configuración y gestión paso a paso

Anneleen Rummens
25 min
tutorial
Ejemplos y tutoriales de consultas SQL
tutorial
Introducción a los disparadores SQL: Guía para desarrolladores

Oluseye Jeremiah
13 min