将事务性数据库中的数据提供给分析数据库,是现代数据架构中不可或缺的一环。然而,这同时也是一场与脆弱工具、高昂成本和复杂运维的持久战。当我们在Snowflake开始构建Postgres服务时,解决这个问题自然成为了第一优先级。 这篇文章将深入数据镜像(Data Mirroring)背后的工程实现,讲述我们如何从头重新构想Postgres复制。 **优化Postgres复制** Postgres是一款出色的操作型数据库,但它的变更数据捕获(CDC)能力仍有许多不足。很多数据管道之所以脆弱,是因为复制工具不得不处理持续数据变更、Schema变更、快照和故障之间复杂的相互作用。为了给Snowflake Postgres提供可靠、开箱即用的体验,我们必须彻底重新发明Postgres复制。 数据镜像是Snowflake Postgres的一项新功能,目前处于公开预览阶段。它能够以低成本、低延迟和事务一致性的方式,将数据高弹性地复制到Snowflake。在底层实现中,它把变更直接从Postgres推送到Apache Iceberg™表中,按事务批量写入。这些批次会自动、事务化且无服务器地应用到Snowflake的表中。 “事务性地推入数据湖,事务性地在Snowflake中应用,无需额外基础设施”——这种简洁性把复制从充满复杂故障条件的混乱流程,变成了一台可以永远运行的简单时钟。 你只需按下一个按钮,就能在Snowflake中获得你的Postgres表。 **从拉取到推送:将CDC放入Postgres** 变更数据捕获,就是把事务性数据库中的变更捕获下来,并以能够在另一个系统上重放的形式呈现。 在Postgres中,主要机制称为“逻辑解码”(logical decoding),也就是将WAL记录解码为逻辑行级变更。

打开网易新闻 查看精彩图片