面试题答案
一键面试主要组件
- 发布端(Publisher):
- 逻辑解码插件:负责将WAL(Write - Ahead Log,预写式日志)中的物理日志记录解码为逻辑格式,例如
wal2json
插件可以将WAL记录转换为JSON格式。这样应用程序就可以理解和处理这些日志数据。
- 逻辑解码插件:负责将WAL(Write - Ahead Log,预写式日志)中的物理日志记录解码为逻辑格式,例如
- 订阅端(Subscriber):
- 逻辑复制槽:在发布端创建,用于标识订阅者的复制进度。发布端会保留从该槽开始的WAL日志,直到订阅者确认已处理这些日志。
- 应用进程:从发布端接收逻辑日志数据,并将其应用到本地数据库,以保持与发布端数据的一致性。
工作流程
- 初始化配置:
- 在发布端,需要启用逻辑复制功能,并创建发布(Publication),指定要发布的表等对象。例如,使用
CREATE PUBLICATION my_publication FOR TABLE my_table;
语句创建发布。 - 在订阅端,创建订阅(Subscription),指定发布端的连接信息、发布名称等。例如,
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=pub_host port=5432 dbname=pub_db user=pub_user' PUBLICATION my_publication;
- 在发布端,需要启用逻辑复制功能,并创建发布(Publication),指定要发布的表等对象。例如,使用
- 日志解码与传输:
- 发布端的逻辑解码插件从WAL日志中提取逻辑变化信息。当数据库发生数据更改(如INSERT、UPDATE、DELETE操作)时,这些更改会记录在WAL日志中。逻辑解码插件将这些物理日志转换为逻辑格式。
- 订阅端通过逻辑复制槽获取发布端的逻辑日志数据。订阅端根据复制槽记录的位置,向发布端请求日志数据,发布端则根据请求发送相应的逻辑日志。
- 数据应用:
- 订阅端的应用进程接收逻辑日志数据,并将其应用到本地数据库。例如,接收到INSERT操作的逻辑日志,应用进程会在本地数据库执行对应的INSERT语句,从而实现数据的迁移。同时,订阅端会定期向发布端确认已处理的日志位置,以便发布端可以清理不再需要的WAL日志。