当前位置: 首页 > 科技观察

PostgreSQL逻辑复制与解密原理解析

时间:2023-03-12 08:04:24 科技观察

在当今数字时代,我们都认同数据会创造价值。为了数据的价值最大化,我们不断构建数据迁移的管道,从同构到异构,从关系到非关系,从云下到云上,从数据仓库到数据湖,尝试融合挖掘数据在各种场景中的价值。在这个纵横交错的数据网络中,逻辑复制扮演着极其重要的角色。让我们把视角从复杂的网络拉回到其中一个端点,从PostgreSQL入手,解密其逻辑复制的原理。在当今的数字时代,我们都同意数据将创造价值。为了数据的价值最大化,我们不断构建数据迁移的管道,从同构到异构,从关系到非关系,从云下到云上,从数据仓库到数据湖,尝试融合挖掘数据在各种场景中的价值。在这个纵横交错的数据网络中,逻辑复制扮演着极其重要的角色。让我们把视角从复杂的网络拉回到其中一个端点,从PostgreSQL入手,解密其逻辑复制的原理。1概念与原理逻辑复制是一种根据复制标识符复制数据及其变化的方法。不同于物理复制中对页操作的描述,逻辑复制是对事务和数据元组的描述。图-WAL数据流示例如图所示,物理复制的数据流是对表空间/数据库/文件节点文件的块进行操作,而逻辑复制的内容是描述元组。接下来我们看一下逻辑复制中的几个概念:Replicationslot复制槽是一组记录复制状态的信息。由于WAL(write-aheadlog)文件在数据实际刷新后被删除,复制槽防止过早清理逻辑复制解析所需的WAL日志。在逻辑复制中,每个槽流式传输来自单个数据库的一系列更改,创建复制槽需要指定它使用的输出插件,并在创建复制槽时提供快照。输出插件输出插件负责将WAL日志解码为可读格式。常用的插件有test_decoding(用于测试)、pgoutput(默认使用)和wal2json(输出为json)。PostgreSQL定义了一系列回调函数。除了使用上面的插件,我们还可以通过回调函数编写自己的输出插件。图-ReplicationSlot数据流复制协议和消息通过复制协议,我们可以从源头获取WAL数据流。比如通过PSQL工具,推荐复制连接psql"dbname=postgresreplication=database"