PostgreSQL整体架构

以下是对Postgresql整体架构进行粗略的剖析,供大家参考:

Postgresql的配置结构:

Postgresql采用的是经典的C/S架构模型,主体是由一个守护监听进程Postmaster,若干个前端应用程序(比如Postgresql的客户端,DBMS等)和后段服务器进程(Postgresql服务器本身)所组成。大体宏观上的连接过程如下:前端数据库应用程序要访问数据库,首先要调用数据库应用连接接口库(libpq),根据我的理解,这个libpq可能是一些统一的接口,供第三方实现与Postgresql连接的组件(比如jdbc,odbc)之类,通过网络套接字进行连接,将连接请求发送给守护监听进程Postmaster,此后其启用一个新的后台服务器进程Postgresql与前端应用进行连接,此后前端应用与后台数据库之间的通信便不再通过Postmaster进行通信,可见Postmaster只是起到监听用户连接的作用。但是值得注意的是:根据一些相关资料,Postgresql采取的是单线程的方式来处理客户端所发来的命令。采取这种方案是由于历史因素所造成的。弊端在于:当系统对进程数有限制的时候,客户发来的请求过多时,会造成系统负载过大。导致执行速度变慢。


存储引擎模块:

存储部分大致可以分为缓存管理以及外存管理两大子模块。

缓存管理:缓冲区最小的单位是页,由大量的页组成缓存区。缓存管理的源码大体架构如下:

storage/buffer下:

buf_init.c:初始化缓冲池,缓冲池的存取方式。

buf_table.c:定义了磁盘页面映射到缓冲区的哈希表以及相关的一些操作。

Bufmgr.c:缓冲区管理的接口,包括对缓冲区的一些操作:读取缓冲区,释放缓冲区,置页面位置为“脏”等。

freelist.c:管理缓冲池,以及缓冲池的替换策略。

Localbuf.c:管理本地缓冲区,本地临时表的快速缓冲区。

下面是页面管理的代码大体架构:

storage/page下:

bufpage.c:对于缓冲区页面的一些操作,如页面初始化,获得临时页面,修复页面段等。

Itemptr.c:磁盘项指针(根据我的理解,磁盘是以B树的形式进行管理的,这里可能是B树节点的指针)。

上面是今天所阅读的内容作的一些总结,希望大家分享一下给出意见,一起讨论。

相关文章

来源:http://www.postgres.cn/docs/11/ 4.1.1. 标识符和关键词 SQL标识符和关键词必须以一个...
来源:http://www.postgres.cn/docs/11/ 8.1. 数字类型 数字类型由2、4或8字节的整数以及4或8...
来源:http://www.postgres.cn/docs/11/ 5.1. 表基础 SQL并不保证表中行的顺序。当一个表被读...
来源:http://www.postgres.cn/docs/11/ 6.4. 从修改的行中返回数据 有时在修改行的操作过程中...
来源:http://www.postgres.cn/docs/11/ 13.2.1. 读已提交隔离级别 读已提交是PostgreSQL中的...
来源:http://www.postgres.cn/docs/11/ 9.7. 模式匹配 PostgreSQL提供了三种独立的实现模式匹...