Transformación de CDC a Postgres: optimizando la replicación con precisión milimétrica.

Transformación de CDC a Postgres: optimizando la replicación con precisión milimétrica.

La disponibilidad de datos provenientes de bases de datos transaccionales en bases de datos analíticas se ha convertido en un componente clave en la arquitectura de datos moderna. Sin embargo, este proceso enfrenta constantes desafíos como herramientas frágiles, altos costos y complejidades operativas. Para abordar esta problemática, Snowflake ha centrado sus esfuerzos en el desarrollo de un nuevo servicio basado en Postgres, priorizando la reimaginación de la replicación de datos desde sus cimientos.

Optimización de la replicación de Postgres

Aunque Postgres es reconocido como un excelente sistema de gestión de bases de datos operacionales, su enfoque para la captura de cambios de datos (CDC, por sus siglas en inglés) presenta limitaciones significativas. Muchas tuberías de datos enfrentan fragilidad debido a que las herramientas de replicación deben lidiar con la interacción compleja entre datos continuos y cambios en el esquema, además de los errores y las instantáneas.

Para ofrecer una experiencia confiable para los usuarios de Postgres en Snowflake, fue imperativo reinventar este proceso completo. La nueva funcionalidad de replicación de datos en Snowflake, actualmente en vista previa pública, se caracteriza por ser altamente resistente y de bajo costo, manteniendo la consistencia transaccional.

Este sistema de «replicación de empuje» funciona enviando cambios de manera directa desde Postgres hacia tablas de Apache Iceberg™, tratando los datos en lotes transaccionales. Con esta estrategia, los lotes se aplican automáticamente en las tablas de Snowflake, lo que establece un proceso sencillo y efectivo que puede operar de manera continua sin la necesidad de infraestructura adicional. El resultado es una replicación que se transforma de un proceso caótico a uno predecible y eficiente.

Del método de extracción al empuje: evolución en la captura de datos de cambios

La captura de datos de cambios se refiere al proceso de registrar las modificaciones realizadas en una base de datos transaccional para permitir su recreación en otro sistema. En Postgres, el mecanismo principal utilizado para esto es la «decodificación lógica», que convierte los registros de WAL en operaciones de inserción, actualización y eliminación a nivel de fila.

No obstante, replicar datos implica mucho más que esta simple tarea. Incluye la gestión de la retroalimentación de datos, los cambios en los esquemas y la manipulación de operaciones de lenguaje de definición y datos (DDL/DML). Inclusive, la replicación lógica incorporada en Postgres solo abarca una pequeña parte de estos aspectos.

Un desafío significativo de la decodificación lógica radica en que el sistema externo que recibe los cambios no tiene conocimiento del estado actual de Postgres. De este modo, no puede identificar cuándo ocurren los cambios en el esquema, ni alinear las instantáneas de las tablas con las modificaciones, lo que complica aún más el proceso.

La solución planteada por Snowflake implica un sencillo, pero efectivo, enfoque: empujar los cambios desde Postgres hacia un lago de datos —en este caso, hacia tablas Iceberg— almacenando los datos en un formato eficiente y escalable como Parquet. Esta metodología se apoya en una nueva extensión de Postgres llamada snowflake_cdc, que permite la transferencia continua de lotes de cambios a registros de cambios por tabla.

El uso de esta extensión se traduce en una coordinación precisa de los cambios en los esquemas y las transacciones complejas, facilitando la toma de instantáneas de datos mientras estas modificaciones son enviadas. Como resultado, la replicación de datos no solo se optimiza, sino que también se vuelve más robusta frente a variaciones en la infraestructura de red o el mismo sistema de gestión de base de datos.