分享免费的编程资源和教程

网站首页 > 技术教程 正文

PostgreSQL技术内幕2:从架构五视图角度来看PG结构

goqiw 2024-09-22 09:45:53 技术教程 28 ℃ 0 评论

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表中。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表