原标题:物理复制 vs 逻辑复制,该如何选择?

近些年受到国内外许多因素的影响,越来越多的业务开始使用PostgreSQL数据库。复制是保证数据安全的一种常用手段,给正在使用的数据提供了一个热备的副本,当一个副本宕机或丢失,能快速使用另一个进行运作,对业务影响较小。PostgreSQL数据库提供了两种复制方式:物理复制和逻辑复制。很多刚接触数据库的小伙伴,不知道该如何选择。本文将对两种复制方式进行一些介绍。

汪彦舒 | 文

© 中兴数据智能(ZTE-DI)出品

物理复制

物理复制是指将主库WAL日志的日志页直接发到备机,备机完全应用的一种复制方式。

物理复制有非常多的好处:

物理层面完全一致,这是许多商业数据库的惯用手段。例如Oracle的DG。

延迟低,事务执行过程中产生REDO record,实时的在备库apply,事务结束时,备库立马能见到数据。不论事务多大,都一样。

物理复制的一致性、可靠性达到了金融级的需求,不必担心数据逻辑层面不一致。

物理复制逻辑流程如下图所示:

但是物理复制要求主备块级完全一致,所以有一些无法覆盖的应用场景,例如备库不仅要只读,还要可写。又比如备库不需要完全和主库一致,只需要复制部分数据,或者备库要从多个数据源复制数据等。无法包含的场景有如下几点:

数据库实例的部分,例如单个数据库或者某些表的复制需求。

数据到达subcriber后,针对不同数据,设置触发器。

将多个数据库实例的数据,同步到一个目标数据库。例如多个数据库同步到一个大的数据仓库。

在不同的数据库版本之间,复制数据。

将一个数据库实例的不同数据,复制到不同的目标库。

在多个数据库实例之间,共享部分数据。

逻辑复制

PostgreSQL逻辑复制是事务级别的复制,使用发布者/订阅者模型,使用订阅复制槽技术,可并行的传输WAL日志,通过在订阅端回放WAL日志中的逻辑条目,保持复制表的数据同步,注意这里不是“SQL”复制,而是复制SQL操作的结果。

逻辑复制流程如下图所示:

逻辑复制应用场景和优点,与物理复制相互补。主要是可基于表级别复制,是一种粒度可细的复制,主要用在以下场景:

满足业务上需求,实现某些指定表数据同步。

不同版本的PostgreSQL之间数据同步。

PostgreSQL大版本升级,数据直接同步备份到高版本。

复制providor可以有多个,复制到subcriber之后做数据的聚集和合并等操作。

可在如下场景中使用:

但是,逻辑复制的限制也是比较多的:

(1) 版本限制:lpglogical是逻辑复制的技术组件,功能使用存在数据库版本限制:数据源发布和订阅节点需要运行 PostgreSQL 9.4 +,复制源过滤和冲突检测需要 PostgreSQL 9.5 +,pglogical 支持跨 PostgreSQL 主要版本之间的复制但在订阅服务器上不同版本之间进行复制时,可能会出现问题。支持从旧版本复制到新版本因为 PostgreSQL 的向后兼容性保证的,但只有有限的向前兼容性比较安全。

(2) 其它限制:不支持DDL复制(ALTER TABLE/CREATE TABLE);不支持TEMPRORARY表和UNLOGGED表复制;不支持Sequences复制( serial/bigserial/identity);不支持TRUNCATE操作复制;不支持大对象复制(Bytea);不支持视图、物化视图、外部表复制;被复制的表上最好有主键约束;如果没有,必须执行:ALTER TABLE reptest REPLICA IDENTITY FULL;(备注)订阅端的复制表是可修改的,复制表一旦修改,发布者和订阅者会数据不一致,进而打破复制等。

总结

物理复制和逻辑复制各有优缺点,在使用的时候需要贴合业务场景,不可一概而论。

在金融领域,所有数据都是很重要的,且对一致性要求非常高的场景,建议使用物理复制,低延时、低损耗,贴合业务需求。

在运营商计费业务中,业务数据也是具有上述特征的,建议同上。

在需要使用读写分离的业务场景(读很多、写较少)中,要求主备节点数据差距小,避免发生各节点读不一致的现象,则建议使用物理复制。

在电信网管领域,只有部分数据重要程度较高,需要备份部分数据,那么,建议使用逻辑复制,节省带宽以及subcriber节点的存储。

PostgreSQL大版本升级等复制两侧数据库版本不一致的场景,则只能选择逻辑复制。

参考资料:

http://mysql.taobao.org/monthly/2016/08/02/

https://blog.csdn.net/weixin_39540651/article/details/106122610

https://blog.csdn.net/pg_hgdb/article/details/83650209 返回搜狐,查看更多

责任编辑:

逻辑复制mysql_物理复制 vs 逻辑复制,该如何选择?相关推荐

  1. (未看)ORACLE物理读和逻辑读(SET AUTOTRACE ON 部分参数解释)[逻辑IO只有逻辑读,没有逻辑写]

    逻辑IO只有逻辑读,没有逻辑写 ORACLE物理读和逻辑读(SET AUTOTRACE ON 部分参数解释) set autotrace 产生部分信息解读的官方文档基本的定义为如下: recursiv ...

  2. SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题

    SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题 基于物理块变化的复制,没有并行也是很快的. 逻辑复制的日志是按事务结束的时间排序的,而物理复制是与事务无关的, ...

  3. Excel:python结合Excel使用技巧经验总结之(将python输出的等间隔列数据直接粘贴复制存到物理表格内等)图文教程之详细攻略

    Excel:python结合Excel使用技巧经验总结之(将python输出的等间隔列数据直接粘贴复制存到物理表格内等)图文教程之详细攻略 目录 Excel使用技巧经验总结 将pandas.DataF ...

  4. Linux 虚拟机和物理机实现文本复制粘贴

    在Linux学习中,肯定有很多同学有这么一个困惑,就是在物理机看到的代码不能直接复制到虚拟机中,需要手打,很麻烦,如果是一大串文字的文本那更麻烦.想当初,在学Linux这门课的时候,在学校的云平台的虚 ...

  5. mysql 逻辑备份 物理备份_数据库的逻辑备份和物理备份--非RMAN

    数据库的逻辑备份和物理备份--非RMAN,不用借助其他工具,只要归档日志和物理备份就可以实现的备份 数据库的备份和恢复 常规而且重要,恢复得到理想状态 逻辑备份 利用EXP备份,从数据库提取写入操作系 ...

  6. mysql 并行复制原理_MySQL 5.7 并行复制实现原理与调优

    MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持"真正&quo ...

  7. 掌握web开发基础系列--物理像素、逻辑像素、css像素

    思考一下 什么是物理像素?什么是css像素? 在 <掌握web开发基础系列--长度单位> 这篇文章中已经介绍过了css像素单位--px,这篇文章详细探讨一下设备物理像素和css像素之间的关 ...

  8. linux逻辑卷下空间丢了,Linux-lvm逻辑卷管理和提示丢失pv物理卷

    问题描述: 有次在使用lvm扩容的时候,整错了,导致显示如下情况 提示缺少一个pv导致无法继续,pvdisplay的时候查看到unknown 使用pvs查看找到pvname的unknown对应群组ce ...

  9. mysql快速复制一张表_MySQL快速复制一张表

    复制一张表,方法有很多种. 一.最简单的方法: create table t2 as select * from t1; 二.逻辑导出: 1.mysqldump逻辑导出 mysqldump -h$ho ...

最新文章

  1. 2017-2018-1 20155324 《信息安全系统设计基础》第十四周学习总结
  2. 动态规划 0-1背包问题 滚动数组
  3. Swift标识符和关键字
  4. vss2005管理vs2010项目
  5. Python分离GIF动画成为多帧图像
  6. 撸了个搜索引擎系统,爽!
  7. 如何用弹出窗口显示进度 - 回复 嘿嘿嘿 的问题
  8. MySql数据恢复方法个人总结
  9. python开源商城_Python 开源网上商城项目
  10. meson是用Python语言开发的构建工具,编译需要Ninja(用C++实现)命令。Meson 旨在开发最具可用性和快速的构建系统。
  11. windows批量ping测试脚本
  12. SQL语句中not in 和not exist的区别
  13. 三圣花乡享地道农家乐
  14. Unity 调用Android手机触屏事件
  15. Java对象数组的初始化
  16. python实现屏幕视频录制_Python实现屏幕录制功能的代码
  17. GIT回顾(持续更新)
  18. 罗斯蒙特PH电极1056-01-22-32-AN智能型四线制变送器规格及特点
  19. mvc中js是如何调用HTML的,MVC中javascript直接调用Model
  20. Mac环境下iterm使用Git命令中文显示乱码

热门文章

  1. 陆家嘴vs静安寺,谁站在魔都职场名媛鄙视链顶端?
  2. 关于COMMIT WORK 和COMMIT WORK AND WAIT的区别及ROLLBACK WORK
  3. CAD - 工具管理篇 - 安装
  4. 控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK
  5. git 常用简化软件开发和发布流程(二)
  6. 在springboot中使用Thumbnailator缩略图片
  7. SQL Server 数据恢复
  8. 计算机毕业设计(附源码)python药店管理系统
  9. HDU 3594 Cactus(有向仙人掌图判断)
  10. Istio的架构概述