首页 > 数据库 >【PostgreSQL】PostgreSQL支持哪些类型的数据复制方法?

【PostgreSQL】PostgreSQL支持哪些类型的数据复制方法?

时间:2024-10-17 18:20:36浏览次数:3  
标签:主库 PostgreSQL 哪些 Replication 复制 从库 数据

PostgreSQL 提供了多种数据复制方法,以满足不同的业务需求和场景。主要的数据复制方法可以分为两大类:物理复制(Physical Replication)和逻辑复制(Logical Replication)。每种复制方式都有其特定的应用场景、优缺点以及实现机制。

物理复制 (Physical Replication)

物理复制是基于底层存储块的复制,它将整个数据库的所有更改都复制到副本服务器上,包括数据文件、日志文件等。物理复制的主要形式是流复制(Streaming Replication)。

1. 流复制 (Streaming Replication)

  • 概念: 流复制是一种异步或同步的方式,主库会持续地向一个或多个从库发送预写日志(WAL, Write-Ahead Log)记录。从库则根据这些WAL记录来更新自己的数据状态。
  • 模式:
    • 异步复制: 主库在事务提交后立即发送WAL记录给从库,但不需要等待从库确认已收到并应用。这种方式提供了较好的性能,但存在一定的数据丢失风险。
    • 同步复制: 在事务提交前,主库必须得到至少一个同步从库的确认,确保该事务已经被成功复制。这提高了数据的一致性,但可能会影响性能。
  • 优点:
    • 高效性: 可以快速复制大量数据。
    • 一致性: 复制后的数据与原数据完全一致。
  • 缺点:
    • 灵活性较低: 不支持表级别的选择性复制。
    • 数据格式依赖: 从库需要与主库使用相同版本的PostgreSQL,并且架构也需保持一致。
  • 应用场景:
    • 用于读取扩展,减轻主库压力。
    • 作为灾难恢复方案的一部分。
    • 实现高可用性和负载均衡。

示例:

假设你有一个PostgreSQL主库部署在一个数据中心,为了保证服务的连续性和数据的安全性,你可以设置一个或多于一个从库,它们位于不同的地理位置。当主库上的任何事务被提交时,相关的WAL记录就会通过网络实时传输到从库,从而实现了数据的即时备份。如果主库出现故障,可以通过配置自动切换到其中一个从库继续提供服务,确保业务不受影响。

逻辑复制 (Logical Replication)

逻辑复制则是基于SQL语句层面的复制,允许用户对特定的表或模式进行复制。它更灵活,可以跨不同版本的PostgreSQL实例复制数据,甚至可以在不同的数据库系统之间复制数据。

1. 内置逻辑复制

  • 概念: PostgreSQL 10及以上版本引入了内置的逻辑复制功能,允许只复制指定的表或者整个模式,而不是整个数据库。这种复制基于发布/订阅模型,其中发布者负责发送变更集,而订阅者负责接收并应用这些变更。
  • 优点:
    • 灵活性: 支持表级的选择性复制。
    • 跨版本兼容: 发布者和订阅者可以运行不同版本的PostgreSQL。
  • 缺点:
    • 性能通常低于物理复制。
    • 设置相对复杂一些。
  • 应用场景:
    • 当只需要复制部分数据时非常有用。
    • 适用于多租户环境中的数据隔离。
    • 跨地域分布的数据中心之间的数据同步。

2. 第三方工具

除了内置的逻辑复制外,还有几种流行的第三方工具可用于实现逻辑复制,如Slony-I, Bucardo, 和pglogical。

  • Slony-I:

    • Slony-I是一个开源的触发器基础的复制系统,专为PostgreSQL设计。它可以实现单向或双向的复制,支持复杂的拓扑结构。
    • 特点:
      • 基于触发器和序列号。
      • 可以实现复杂的复制拓扑,如环形、星型等。
    • 应用场景:
      • 需要高级复制策略的情况,例如分片复制。
  • Bucardo:

    • Bucardo是另一个基于触发器的复制解决方案,但它提供了更高级的功能,比如多主复制。
    • 特点:
      • 支持多主复制,允许多个节点同时写入。
      • 可以轻松添加新的复制目标。
    • 应用场景:
      • 需要实现分布式写入能力的系统。
  • pglogical:

    • pglogical是由2ndQuadrant开发的一个商业插件,利用了PostgreSQL 9.4中引入的复制槽特性,能够在不增加额外开销的情况下进行高效的逻辑复制。
    • 特点:
      • 高效,无需触发器。
      • 支持过滤规则,可以选择性地复制某些行。
    • 应用场景:
      • 对性能有较高要求且需要选择性复制的情况。

示例:

假设你的公司正在运营一个多租户SaaS平台,每个租户拥有独立的数据集合。在这种情况下,你可能希望将某个租户的数据单独迁移到另一个集群中,以便更好地管理资源。使用逻辑复制,你可以创建一个发布者角色,在现有集群中定义一组表作为发布的对象;然后在目标集群中创建相应的订阅者角色,订阅这些发布的表。这样,每当源集群中有针对这些表的修改时,变更都会自动传递到目标集群中,而不会影响其他租户的数据。

总之,PostgreSQL提供的多样化的复制选项能够帮助组织根据自身的需求选择最合适的方法来构建高可用性、高性能的数据基础设施。无论是追求极致的数据一致性还是灵活性,都可以找到适合的解决方案。


标签:主库,PostgreSQL,哪些,Replication,复制,从库,数据
From: https://blog.csdn.net/qq_24766857/article/details/143022126

相关文章

  • 对于SOCKS协议的一些误区有哪些?
    代理协议在设备与代理服务器之间的数据交换中起到了关键作用。在这方面,SOCKS代理协议是常见的选择之一,被广泛应用于下载、传输和上传网络数据的场景。然而,关于SOCKS代理协议存在一些常见的误解,让我们来逐一了解。一、使用SOCKS代理可以加密一个普遍的误解是认为使用SOCKS代理......
  • PostgreSQL 17重磅登场——世界上最成功的数据库
    朋友们,万众期待的PostgreSQL大版本发布又来了!这一次,PostgreSQL17带着全新的性能优化和开发者必备的新功能强势登场。与其说这是一场普通的更新,不如说它是一场专为高并发工作负载和海量数据量身打造的技术嘉年华! 在本次的发布说明中,PostgreSQL全球社区也毫不讳言地直接宣布......
  • 手机pdf转word软件有哪些?分享几种好用手机、电脑转换软件
    在日常工作和学习中,我们经常需要将PDF文件转换为Word文档以便于编辑和修改。有的小伙伴身边有电脑,而有的小伙伴手上只有手机,那怎么在手机上将PDF转换成Word呢?下面给大家分享几种PDF转换Word方法软件,手机、电脑都有,一起来看看吧。软件一:迅捷PDF转换器App这是一款功能强大的PD......
  • 常见的Linux面试题及答案解析,哪些你还不会?
    Linux面试题1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示?切换目录用什么命令?2、怎么查看当前进程?怎么执行退出?怎么查看当前路径?3、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户id?查看指定帮助用什么命令?4、Ls命令执行什么功能?可......
  • 高级java每日一道面试题-2024年10月17日-Web篇-常见的web攻击有哪些?
    如果有遗漏,评论区告诉我进行补充面试官:常见的web攻击有哪些?我回答:常见的Web攻击种类繁多,攻击者利用各种漏洞和技术手段来入侵网站、窃取数据或破坏服务。以下是一些最常见的Web攻击类型及其简要说明:1.SQL注入(SQLInjection,SQLi)描述:攻击者通过在输入字段......
  • UML 有哪些
       UML(统一建模语言,UnifiedModelingLanguage)是一种标准化的建模语言,用于描述软件系统的结构、行为和交互。它提供了一套图表来帮助开发人员、架构师和业务分析师对系统进行建模。UML图表分为两大类:结构图和行为图。一、UML结构图(StructuralDiagrams)结构图主要......
  • PostgreSQL中将对象oid和对象名相互转换
    文章目录PostgreSQL中将对象oid转为对象名数据库类型转换对应类型的oid对应关系创建测试数据将对象名转为oid类型转换关系测试示例PostgreSQL中将对象oid转为对象名使用pg的内部数据类型将对象oid转为对象名,可以简化一些系统视图的关联查询。数据库类型转换对应类......
  • TikTok出现零播放的原因是什么?解决方法有哪些?
    TikTok作为一个月活跃用户数已经超过15亿的社媒平台,巨大的流量不断吸引着用户加入,其中不乏需要推广获客的卖家。在运营推广工作中,视频播放量是重要的评估维度,如果出现零播放的情况,需要卖家找出原因并尽快解决。一、零播放原因1.IP问题IP定位符合平台要求是使用TikTok的基......
  • 操作系统层面有哪些锁
    操作系统层面有哪些锁互斥锁互斥锁在同一时刻只允许一个线程或进程访问共享资源,其他线程或进程需要等待锁的释放。同步锁两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如A任务的运行依赖于B任务产生的数据互斥与同步的区别​ 互斥锁是通......
  • jeecgboot 3.7.1 一键将生成好的代码复制到前后端项目目录,并执行SQL插入菜单的python
    importshutilimportosimportmysql.connectorfrommysql.connectorimportErrorbase_dir="D:/pro/JeecgBoot-v3.7.1"code_dir="/gendcode"package_name="meetrice"#MySQL连接配置config={'user':'root......