Snowflake 如何将 CDC 推入 Postgres

How We Pushed CDC into Postgres

Snowflake 如何将 CDC 推入 Postgres

在构建 Snowflake Postgres 服务时,我们将解决数据复制难题列为首要任务。传统 CDC 工具常因处理复杂的模式变更和故障而变得脆弱不堪。我们彻底重构了 Postgres 复制机制,推出了 Data Mirroring 功能。通过新的 snowflake_cdc 扩展,我们将变更数据捕获从“拉取”模式转变为“推送”模式,直接将变更批量推送到 Apache Iceberg 表。这种基于事务的架构利用对象存储解耦了生产者和消费者,确保模式变更与数据变更的完美同步。配合 Snowflake 的事务性应用和 Live Views 功能,我们将原本混乱的复制过程变成了稳定可靠的“发条式”机制,实现了低成本、低延迟且始终一致的数据镜像。

这种简单性将复制从一个充满复杂故障条件的混乱过程,转变为一个可以永远运行的精密发条机制。
  1. bastawhiz

    Clickhouse 通过收购 peerdb 真正做到了这一点。我在处理许多 TB 级数据库时使用过它,基本上完全不用操心。我们真正需要关注的只有一点:避免一次性复制太多数据(受限于 Postgres 或 Clickhouse 集群的物理计算和 I/O 容量)。

  2. gopalv

    长期以来,Vertica 的招牌戏法就是为同一行数据同时维护 WOS 和 ROS 格式,并在两者之间实现反缓存。

    你其实可以用 debezium 和 delta lake 构建类似的系统,但这已经很久了,不过如果运行速度够快,compaction(数据压缩)就会失败。我在 2014 年左右见过 Oracle GoldenGate 12c 做过这个戏法,当时是用 Mysql 作为廉价的副本。但它们都在某个方向上对架构变更非常脆弱。

    最接近的“开箱即用”等效方案是 Aurora -> Redshift 桥接 [1]。

    [1] - https://aws.amazon.com/rds/aurora/zero-etl/

  3. hasyimibhar

    虽然 pg_lake 是开源的,但值得指出的是,它大量引用了相关概念,却缺失了 CDC 功能。

    有一堆评论和链接指向一个已关闭的项目:https://github.com/snowflake-eng/sfpg-extension-pg_lake_repl...

同日更多故事

2026-08-10