网站首页 > 技术教程 正文
0.内容简介
本篇内容通过从PG的逻辑架构,开发架构,运行架构,物理架构以及数据架构来分析PG,对PG建立一个整体的认识。
1.逻辑架构
逻辑架构考虑功能需求,主要从行为和职责来划分,对于PG主要分为四大类,一是连接管理系统,直接和外部交互并管理连接;二是编译查询系统,负责SQL语句的编译,优化,执行,分为编译器,优化器和执行器;三是存储管理系统,负责数据的存取;最后是事务系统,负责保证事务执行的ACID。
2.开发架构
关注软件模块的组织形式和开发的质量属性,此处主要关注模块和代码文件的组织形式,作为后续源码分析的基础。
目录 | 说明 |
Makefile | 编译使用 |
access/ | 各种存储访问方法(在各个子目录下)common(共同函数)、gin(Generalized Inverted Index用逆向索引)、gist(Generalized Search Tree通用索引)、 hash(哈希索引)、heap(heap的访问方法)index(通用索引函数)、nbtree (Btree函数)、transam(事务外理) |
bootstrap/ | 数据库的初始化处理initdb的时候使用 |
cataloq/ | 系统目录 |
commands/ | SELECT/INSERT/UPDATE/DELETE 的SQL语句的处理 |
executor/ | 执行器(访问的执行) |
foreign/ | FDW(Foreign Data Wrapper) |
lib/ | 公共函数 |
libpq/ | 通讯处理 |
main/ | postgres的主函数 |
nodes/ | 构建树节点相关的处理函数 |
optimizer/ | 优化器 |
parser/ | SQL解析器 |
port/ | 平台相关的代码 |
postmaster/ | postmaster的主函数 |
replication/ | streaming replication |
regex/ | 正则处理 |
rewrite/ | 规则及视图相关的重写处理 |
snowball/ | 全文检索相关(语干处理) |
storage/ | 共享内存、磁盘上的存储、缓存等全部一次/二次记录管理(以下的目录)buffer/(缓存管理)file/(文件)、freespace/(Fee Space Map管理) ipc/(进程间通信)、large_object /(大对象的访问函数)lmgr/(锁管理)、page/(页面访问相关函数)、smgr/(存储管理器) |
tcop/ | postgres(数据库引擎的进程)的主要部分 |
tsearch/ | 全文检索 |
utils/ | 各种模块(以下目录)adt/(嵌入的数据类型)、cache/(缓存管理)、error/(错误处理)、fmgr/!utils函数管理)hash/(hash函数)init/(数据库初始化、postgres的初期处理)、mb/(多字节文字处理)、misc/(其他)、mmgr/(内存的管理函数)、resowner/(查询处理中的数据(buffer pin及表锁)的管理sort/(排序处理)、time/(事务的 MVCC管理) |
3.运行架构
主要关注运行期的属性(性能,可伸缩性,持续可用性,安全性等),此处主要关注程序的进程模型,分析各部分的作用。
其中最为关键的是是Postmaster(守护进程)和Postgres(服务进程),Postmaster负责当客户端发起连接时,fork服务进程提供服务,负责数据库系统的启动,关闭,监听,接受新的客户端连接,处理配置变更和恢复以及故障处理。服务进程负责客户端连接认证,处理客户端发出的查询和语句。
辅助进程:
Background writer:负责将共享缓冲池中的脏页逐渐刷入持久化存储中。
Checkpointer:在PG9.2及其后版本中,该进程负责处理检查点。
Autovacuum launcher:周期性地启动自动清理工作进程。
WAL writer:本进程周期性地将WAL缓冲区中的WAL数据刷入持久存储中。
Statistics Collector:负责收集统计信息,用于诸如pg_stat_activity, pg_stat_database等系统视图。
Logging collector (logger):负责将错误消息写入日志文件。
Archiver:负责将日志归档。
4.物理架构
物理架构关注如何安装部署,和分析原理关系不大,不再描述。
5.数据架构
主要考虑数据需求,关注持久化数据的存储方案,存储格式。此处主要关注逻辑存储和物理存储,了解储存部分的层级关系,详细的存储方式,目录结构会在存储章节介绍。
- Database cluster:数据库的集合,一个Database可以包含多个Database、多个User,其中Database和Database中的对象都有它们自己的所有者:User。
- Database:Postgres 默认数据库、Template0 最精简模板、Template1 默认模板;数据库本身也是数据库对象,并且在逻辑上彼此分离。存储 schema 的一个逻辑空间,对应在物理层面上也是一个目录。
- Schema:一个数据库可以有多个User用户,多个Schema模式,默认创建一个数据库会存储在默认表空间,它包含一个Public名称的Schema模式(拷贝自Template1模板)。它可隔离多个用户之间相同名称的对象。一个数据库可以有多个Schema模式,他们互不相关互相隔离。
- User:每个数据库都有一个OWNER用户,每个用户可以OWNER多个数据库,是一个多对多的关系。
- 数据库对象:这里包含了table,index,view,序列,函数等。
- tablespace:存储数据库的一个逻辑空间,可以存放不同的数据库
- OID:所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。
猜你喜欢
- 2024-09-22 PG的参数有哪些类型
- 2024-09-22 一文看懂PG三大配置文件
- 2024-09-22 阿贝云服务器2022/08/04
- 2024-09-22 三丰云服务器2022/07/15
- 2024-09-22 PostgreSQL技术内幕4:PostgreSQL存储引擎内存管理
- 2024-09-22 阿贝云服务器2022/04/02
- 2024-09-22 阿贝云服务器2022/07/01
- 2024-09-22 阿贝云服务器2022/06/02
- 2024-09-22 三丰云服务器2022/06/13
- 2024-09-22 阿贝云服务器2022/05/02
你 发表评论:
欢迎- 05-14喜报!双色球5注824万头奖花落辽宁等地,开奖情况一览
- 05-14双色球新一期前瞻:红球蓝球走势深度剖析,精选号码提前看
- 05-1449倍、33倍、30倍、15倍!双色球第25053期开奖:多张倍投票集结
- 05-14双色球25054期:红球:04、05、15、18、29、33 蓝球:05、08
- 05-14厉害了!495倍独蓝票、万元独蓝票双双报喜!双色球第25053期开奖
- 05-14双色球25054期!龙头02凤尾31,独蓝14稳中,连号20-21围剿奖池!
- 05-14双色球25054期参考:蓝球侧重选2路蓝,红球依然三金胆、重号先
- 05-14双色球25054期:独蓝04,头01尾30,连号15-16,6+1精选
- 最近发表
-
- 喜报!双色球5注824万头奖花落辽宁等地,开奖情况一览
- 双色球新一期前瞻:红球蓝球走势深度剖析,精选号码提前看
- 49倍、33倍、30倍、15倍!双色球第25053期开奖:多张倍投票集结
- 双色球25054期:红球:04、05、15、18、29、33 蓝球:05、08
- 厉害了!495倍独蓝票、万元独蓝票双双报喜!双色球第25053期开奖
- 双色球25054期!龙头02凤尾31,独蓝14稳中,连号20-21围剿奖池!
- 双色球25054期参考:蓝球侧重选2路蓝,红球依然三金胆、重号先
- 双色球25054期:独蓝04,头01尾30,连号15-16,6+1精选
- 一号之差!井喷1416注,5注一等奖,100注二等,双色球25053开奖
- 双色球25054期:1、5尾,头单,尾双,斜连三码,胆11、12、27
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)