当前位置: 首页 > news >正文

postgres数据库的流复制

1. 流复制和逻辑复制的差异

  • 逻辑复制和流复制最直观的不同是,逻辑复制支持表级别复制
  • 区分点事原理不同
    • 逻辑日志是在wal日志产生的数据库上,由逻辑解析模块对wal日志进行初步的解析,解析结果是ReorderBufferChange(理解为HeapTupleData),再由pgoutput plugin对中间结果进行过滤和消息化拼接,然后将其发送到订阅端,订阅端根据接受到的Heap TupleData重新对其执行insert、delete、udpate操作
    • 流复制时将数据从walrecord拷贝到数据页,
    • 逻辑复制时将数据重新执行一次insert、update或delete

2. 流复制

  • 流复制面对未提交的事务,事务没有提交也会同步到备机,当主库进行提交和回滚的时候,也会同步进行提交和回滚。对大事务相对友好
  • 流复制会导致备机也会产生大量死元祖,需要做vacuum
  • 流复制时将wal日志中记录的内容按照确切的块地址逐字节的拷贝到备库,因此主备之间数据分布是一样的,意味着主备机器上,同一条记录的ctid是相同的

3. 流复制的实现原理

  • 后端进程通过执行XLogInsert和XLogFlush函数,将wal数据写入并刷新到WAL段文件中
  • walsender进程将写入wal段的wal数据发送给walreveiver进程
  • 发送wal数据后,后端进程继续等待备用服务器的ACK响应。更准确的说,后端进行通过执行内部函数SyncRepWaitForLSN获得一个latch,并等待他被释放
  • 备用服务器上的walreveiver将接受到的wal数据写入备用的wal段中,使用write系统调用,并向walsender返回一次ACK响应
  • walreveiver使用如fsync等系统调用将wal数据刷新到wal段,向walsender返回另一个ACK响应,并通知启动进程关于wal数据的刷新
  • startup进程回访已写入wal段的wal数据
  • 当walsender收到walreveiver的ack响应时,释放后端进程的latch,然后后端进程的提交或中止操作将完成。latch释放的时机取决于参数synchronous_commit,如果设置为on,当收到步骤5的ACK时释放latch,如果设置为remote_wirte,则在收到步骤3的ACK时释放latch

ACK的包括内容

  • 写入最新wal数据的lsn位置
  • 刷新最新wal数据的lsn位置
  • 在启动过程中回放最新wal数据的lsn位置
  • 发送此响应的时间戳

过程分析

  • 主库的进程进行写操作
  • 产生WAL record
  • walsender感知到新的wal,发送给备库
  • 备库接受,写盘再回放

是否发送wal日志与主库事务的提交与否没有关系,但主库是否能提交取决于备库的wal日志写入位置,默认是on的话需要落盘,备库实时回放

注意点

  • 流复制就是借助latch实现主从进程间的协作
  • 流复制场景下,只读事务、子事务的提交以及事务回滚,无需等待备库的ACK

相关文章:

postgres数据库的流复制

1. 流复制和逻辑复制的差异 逻辑复制和流复制最直观的不同是,逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上,由逻辑解析模块对wal日志进行初步的解析,解析结果是ReorderBufferChange(理解为HeapTup…...

Dxf库中的DL_Extrusion类

类DL_Extrusion DL_Extrusion 是 DXF 库中的一个类,用于表示三维实体的扩展信息。在 DXF 文件中,DL_Extrusion 类通常用于表示具有高度的三维图形实体,如立方体、圆柱体等,以及其它具有体积的几何对象。 以下是一个简单的示例代…...

“ONLYOFFICE 8.1版本评测:功能更强大,用户体验更佳”

最新版本的在线编辑器已经发布 ONLYOFFICE在线编辑器的最新版本8.1已经发布,整个套件带来了30多个新功能和432个bug修复。这个强大的文档编辑器支持处理文本文档、电子表格、演示文稿、可填写的表单和PDF,并允许多人在线协作,同时支持AI集成…...

搜维尔科技:【研究】触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验

自然交互可提高VR模拟的有效性。研究表明,触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验。 以下是验证 医疗培训中的触觉技术 “ 95.5%的参与者表示触摸是 XR 教育的重要组成部分,90.9% 的参与者表示 XR 触觉将提供一个安全的学习场所。…...

【小学期】实体类设计——以学生管理系统为例

项目目录中的位置 将Student.java文件放在src/model目录中,即: student_management │ ├── src │ ├── model │ │ ├── Student.java // 这里是Student实体类 │ │ └── StudentDAO.java │ │ │ ├── view │ │ …...

Java测试类

在Java中,为了编写测试类,通常使用JUnit框架。 1. 首先,创建一个名为Calculator的简单Java类,它包含一个方法add用于计算两个整数的和: public class Calculator {public int add(int a, int b) {return a b;} } 2.…...

python 中面向对象编程:深入理解封装、继承和多态

在本章中,我们将深入探讨Python中的高级面向对象编程概念,包括封装、继承和多态。让我们开始吧! 目录 面向对象简介类和实例属性和方法继承和多态 高级面向对象概念私有变量使用 property使用 __slots__类的特殊成员__doc____call____str____…...

OpenCV练习(2)图像校正

1、傅里叶变换 霍夫变换 直线 角度 旋转2、边缘检测 霍夫变换 直线角度 旋转3、四点透视 角度 旋转4、检测矩形轮廓 角度 旋转 1.目的 实现类似全能扫面王的图像校正功能 2. 基于轮廓提取和透射变换 基于轮廓提取和透射变换的矫正算法更适用于车牌、身份证、人民…...

Excel中的“点选输入”——次级下拉列表创建

在Excel中,用“数据验证”功能可以设置下拉列表,二级下拉列表需要设置公式。 (笔记模板由python脚本于2024年06月16日 18:36:37创建,本篇笔记适合经常使用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:http…...

基于 Spring AOP 实现安全检查

在现代应用程序中,安全性是一个至关重要的方面。通过对系统中的关键操作进行安全检查,可以有效防止未授权的访问和操作。Spring AOP(面向切面编程)提供了一种优雅的方式来实现安全检查,而无需修改业务逻辑代码。本文将…...

【MySQL】数据库事务详解

文章目录 前言1. 事务的定义2. 事务的四个特性2.1 原子性2.2 一致性2.3 隔离性2.4 持久性 3. 事务的并发问题3.1 脏读3.2 不可重复读3.3 幻读3.4 更新丢失 4. 事务的隔离级别5. 事务的使用结语 前言 假设我们现在需要操作数据库进行转账,A 给 B 转账 100 块钱&…...

ubuntu链接mysql

C链接mysql 报错 sudo apt-get update sudo apt-get install libmysqlclient-dev 指令编译 g -o mysql_example mysql_example.cpp -I/usr/include/mysql -lmysqlclient g mysql_test.cpp mysql_config --cflags --libs 安装mysql sudo apt updatesudo apt install mysql-…...

QStyledItemDelegate 和 QItemDelegate 的作用

在Qt中,QStyledItemDelegate和QItemDelegate是用于自定义和控制项视图控件(如QListView、QTableView、QTreeView)中项的显示和编辑的委托类。它们提供了对项的外观和编辑行为的定制能力。尽管它们在功能上有相似之处,但它们之间有…...

3.任务的创建与删除

1.什么是任务? 任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。 任务通常都含有while(1)死循环 2.任务创建与删除相关的函数 3.CUBEMAX相关配置 编辑一个led1闪烁的任务...

进程、CPU、MMU与PCB之间的关系

目录 进程与cpu(中央处理器) 源代码、程序、cpu与进程的关系 cpu超线程 CPU的简易架构与处理数据过程 进程与MMU(内存管理单元) mmu作用 cpu和mmu的关系 进程与PCB(进程控制块) PCB介绍与内部成员…...

代码随想录算法训练营Day50|1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列

最长公共子序列 1143. 最长公共子序列 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 最长公共子序列 - 动态规划 Longest Common Subsequence - Dynamic Programming_哔哩哔哩_bilibili 本题和上一题718.最长重复子数组在很多方面相似&#xf…...

国家自然科学基金标书大全(2002-2024)

数据来源:在20世纪80年代初,为了促进中国的科技体制革新并改革科研资金分配机制,中国科学院的89位院士联名向党和国家领导人提出建议,设立了国家自然科学基金的设立。国自然基金自创立以来,根据国家发展科学技术方针、…...

Python代码打包成exe应用

目录 一、前期准备 二、Pyinstaller打包步骤 Pyinstaller参数详解 三、测试 Spec 文件相关命令 一、前期准备 (1)首先,我们需要确保你的代码可以在本地电脑上的pycharm正常运行成功。 (2)我们要先安装Pyinstalle…...

CesiumJS【Basic】- #016 多边形面渲染“花了”的问题

文章目录 多边形面渲染“花了”的问题1 目标2 问题代码3 修正后代码4 总结多边形面渲染“花了”的问题 1 目标 解决多边形的面“花了”的问题 2 问题代码 使用Cesium.PerInstanceColorAppearance渲染后出现色斑 import * as Cesium from "cesium";const viewer …...

qt 开发对信号槽进行二次封装,实现信号槽管理接口。

最近做的一个项目,由于工程需要模块之间能够互相通信,但又不想模块之间耦合度太高 使用信号槽的话,需要两个类的对象或者指针在其中一个类都要体现,这样达不到效果, 想要一个管理类对这些互相通信的类之间进行管理,只需要在各自的类注册发送者和接收者即可,双方通过一…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...