物理流复制VS逻辑订阅
我是本际云服务器推荐网的小编小本本,今天为大家介绍PostgreSQL的流复制和逻辑复制。

1. 物理流复制
物理流复制是基于REDO的块级别复制,复制出来的数据与主库数据库一模一样,每个块都是一样。备库为只读,不能写入。物理流复制不需要等待事务提交,即可将REDO日志发往备库,备库可以直接应用。但需要复制所有的REDO日志,可能会与清理REDO冲突,查询需要的读取的数据版本,主库可能已经清理,同步到备库时,和正在查询的SQL冲突。
2. 逻辑订阅
逻辑订阅可以做到表级别复制,支持读写。需要等待事务提交后,发布端才会使用wal_sender进程将解码后的数据发送给订阅端,订阅端接收应用。不需要复制所有的REDO日志,仅复制“订阅表产生的REDO解码后的数据”,但需要产生额外的REDO信息。订阅对主库的性能影响较大,但解决了物理流复制备库上的查询语句可能冲突的问题。
PostgreSQL物理流复制
当用户执行DML、DDL操作后,产生的WAL日志会通过流复制,备库不断的从主库同步相应的数据。PostgreSql支持同步复制以及基于优先级的同步复制。
1. synchronous_commit
同步复制选项设置为off,表示提交事务不等待本地WAL BUFFER写入WAL日志后才向客户端返回成功,可能丢失最新提交的事务。设置为on,代表需要等待备库应用完事务日志并且数据刷到磁盘中,主库才可以返回成功。
2. 物理复制-使用场景
适合用于单向复制;适合任意事务、任意密度写的同步;适合HA、容灾、读写分离;适合备库只读的场景。
PostgreSQL逻辑复制
逻辑复制基于逻辑解析,实现表数据同步。适合发布端和订阅端都有读写的情况,不同库名之间的表同步,PostgreSQL跨版本数据同步等。
1. 逻辑复制限制
目前不支持DDL解析,只能解析DML(INSERT、UPDATE、DELETE,TRUNCATE);TEMPORARY表和UNLOGGED表不会被复制;表必须有主键或唯一约束,否则像update或delete操作无法被复制等限制。
2. 逻辑复制-使用场景
适合将多个数据库实例的数据汇聚到同一个目标库或将一个库的数据分发到多个不同的库;PostgreSQL大版本升级;实现某些指定表数据同步;多个业务之间少量数据同步、数据汇总、数据拆分等。
以上是小本本为大家整理的关于PostgreSQL流复制和逻辑复制的介绍,希望对大家有所帮助。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6370.html
