当客户端启动更新事务时,该事务在本地执行,并且在执行完成后启动该事务的提交操作。在实际提交之前,需要广播生成的副本写集并将其复制到其他成员。如果成功检测到冲突,则该组决定可以提交该事务,而其他成员可以申请,否则它将回滚。

组复制可以两种模式运行:
三、 PostgreSQL
([一) PostgreSQL体系结构
PostgreSQL使用C / S模型提供服务。客户端和服务器可以通过不同主机上的TCP / IP连接到网络。体系结构如下:

1、主进程Postgres(驻留进程)
主要进程是Postgres,这是启动PostgreSQL时启动的第一个进程。在启动时,他将执行恢复,初始化共享内存并启动后台进程。当客户端发起链接请求时,postgres将产生一个子进程并创建一个后端进程。
是整个实例的主控制过程,负责启动和关闭实例。

2、 Postgres(子进程),子进程
Postgres接受前端请求,搜索,最后返回结果。如果请求更新,将首先记录一个日志(在PostgreSQL中称为WAL日志),以便在重新启动计算机时促进数据恢复。此外,该日志将定期存档以在需要时进行数据恢复。

3、背景处理(背景处理)
将错误信息写入日志。
定期将脏内存块写入文件。
发生检查点时,将脏内存块写入数据文件
将WAL(提前写入日志)缓存写入WAL文件。
在存档模式下,将WAL文件复制到特定路径。
WAL日志将被回收,PgArch将在归档之前备份WAL日志。通过PITY(时间点恢复)技术,在对进行完全备份之后,该技术将通过归档,使用的完整备份以及以后生成的WAL日志,在备份时间点之后备份WAL日志。在完全备份后将向前推送到任何时间点。
启用自动清理后,将用于生成自动清理工作进程。自动真空过程的作用是在需要时在充气台上自动执行真空操作。
在PostgreSQL中,对该表执行DELETE操作后,不会立即删除旧数据,并且在更新数据时,不会更新旧数据,但是会生成新的数据行。仅将旧数据标记为已删除,并且仅当没有其他并发事务读取数据时,它们才会被清除。此清理是通过AutoVacuum流程完成的。
用于收集统计信息。
4、共享内存和本地内存
如下:

启动PostgreSQL后,将生成一个共享内存,并将其用作数据块的缓冲区,以提高读写性能。 WAL日志缓冲区和Clog缓冲区也存储在共享内存中,此外,诸如进程,锁和全局统计信息之类的全局信息也存储在共享内存中。
数据缓冲区通过BgWrite进程定期写入数据文件。 WAL缓冲区通过WALWrite过程写入WAL文件,并通过PgArch定期归档并写入归档日志
非全局存储的数据存储在本地内存中,主要包括:
临时缓冲区:用于临时表。默认值为8MB
work_mem:用于排序,位图索引,哈希链接和合并链接操作。默认值为4MB。
manintance_work_mem:用于真空和索引创建操作。默认值为64MB。
([二)数据结构
1.相关概念:
PostgreSQL由一系列组成。一组PostgreSQL程序称为集群。
执行initdb()命令时,将创建template0,template1和postgres。
template0和template1是创建用户时使用的模板。它们包含系统元数据表。
在initdb()完成之后,template0和template1中的表是相同的。但是template1可以根据用户需求创建对象。
通过克隆template1来创建用户;
2.表空间相关概念:
在initdb()之后,创建pg_default和pg_global表空间。
如果在创建表时未指定特定的表空间,则默认情况下该表将存储在pg_default表空间中。
默认情况下,用于管理整个集群的表存储在pg_global表空间中。
pg_default表空间的物理位置是$ PGDATAbase目录。
pg_global表空间的物理位置是$ PGDATAglobal目录。
一个表空间可以被多个同时使用。此时,每个将在表空间路径下创建为新的子路径。
创建用户表空间将在$ PGDATApg_tblspc目录下创建一个软连接,并连接到表空间指定的目录位置。
3.表相关概念:
每个表有三个数据文件:
文件用于存储数据(文件名是表的OID);
文件用于管理表的可用空间(文件名为OID_fsm)。
是否可以使用文件来管理表的块(文件名为OID_vm)。
索引中没有_vm文件,只有OID和OID_fsm两个文件
([三)后端处理流程
接收前端发送的查询(SQL文本)
组成分析。将SQL文本(简单文本)转换为解析器树。
在解析结构树之后,将其替换为查询树。此时,将访问以检查表是否存在,如果存在,则将表名转换为OID。此过程称为分析。
由于PostgreSQL还通过重写查询语句来实现视图和规则,因此在需要时在此阶段重写查询语句。
解析查询树后,可以生成计划树。
按照执行计划中的步骤完成查询的目的。
执行结果返回到前端。
返回第一步并重复。
四、国内关系

国内关系很多,这里仅以GaussDB T为例。
([一) GaussDB T架构
1.内存结构
内存结构分为四个部分,如下所示:

器:包括TCP LSNR和IPC LSNR,用于用户连接请求
代理池:代理的连接池
SGA:
日志缓冲区:全局日志缓冲区,缓存重做日志
数据缓冲区:全局数据页缓冲区,用于缓存表索引和其他数据
SQL缓存:全局执行计划缓冲区
排序区域:全局排序/物化缓冲区
字典缓存:全局数据字典(元数据)缓冲区
大型池,大型池,存储较大的SQL
会话池,全局会话池,用于存储会话
LOGW:日志写入线程,负责将日志缓冲区中的日志写入磁盘。
CKPT:负责将脏页(Dirty Page)刷新到磁盘,保证WAL,并更新控制文件。
SMON:负责监视系统状态,例如检测死锁和修复异常会话。
JOBS:定制后台任务调度的应用。
LOGR:日志复制,用于HA和GR。
ARCH:用于日志文件归档。
2、存储结构
数据存储为文件,文件主要有三种类型:
DATA FILE,数据文件,用于存储各种数据,单个库最多可包含1024个数据文件,每个数据文件最大为8T(undo除外,最大为32G)
LOG FILE,日志文件,用于存储重做日志,可以重复使用,至少3组,每个重做日志文件一般建议5-20G
在启动到装入阶段时,将检查用于名称,数据文件位置和其他信息的控制文件,控制文件。
(二) GaussDB T的关键技术

提交事务后,必须先刷新重做日志。
刷新脏页数据后,可以回收重做日志。
如果在刷新磁盘之前关闭数据电源,则在打开电源后需要重做以保持数据一致性。
脏页队列:脏页根据时间顺序形成链接列表,即脏页队列。根据队列的顺序对检查点进行分组和刷新;
Checkpoint任务调度:Checkpoint后台服务线程将通过计时,脏页数量,RedoLog已满来触发刷新操作,这三种策略之一得到满足;
重做任务调度:当满足以下条件之一:重做缓冲区的时间,重做缓冲区的数量和事务提交时,重做后台服务线程将触发重做日志缓冲区的刷新操作;
镜像页面机制:闪烁时间相对较长。为了避免I / O阻塞,Checkpoint使用镜像页面缓存来完成刷新。
使用MVCC机制来提高交易并发性。
([三) GaussDB T的高度可用的部署模式
1、独立和主用/备用部署模式

2、分布式部署模式

([四)典型的分布式部署体系结构

每个组件的说明如下:
OM(操作管理器):操作和维护管理模块。提供用于群集日常运行和维护以及配置管理的管理界面和工具。
CM(集群管理器):集群管理模块。管理和监视分布式系统中各种功能单元和物理资源的运行,以确保整个系统的稳定运行。
CN(协调节点):协作调度节点。负责接收来自应用程序的访问请求并将执行结果返回给客户端;负责分解任务并计划在每个DN上并行执行的任务片段。在集群中,有多个CN,并且它们的角色相等。
DN(数据节点):数据节点。负责存储业务数据,执行数据查询任务并将执行结果返回给CN。在群集中,有多个DN。每个DN支持多台存储备份机。
GTS(全球时间服务器):全球时间服务器。在强一致性场景中使用,以为每个节点提供逻辑时钟。
五、主流关系特征分析

[编辑推荐]
从Cloud Native Computing Foundation毕业的十大开源项目是什么?除了iconfont之外,还有这10个开源SVG图标库。 Facebook开源聊天机器人Blender(被称为全球最流行的Java开源项目,在4月在Github上闻名),谈论Ubuntu,谈论开源,谈论世界
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-313924-2.html
才能具备基本的判断分析能力
这是个无利不起早的国家
更惶论与倭相较了