MonetDB vs PostgreSQL数据库

MonetDB与PostgreSQL数据库的架构比较,虽然它们存储结构有本质的区别,一个以列存储,一个以行存储;一个没有索引,一个有多种类型的索引,B+树索引,Hash索引,GiST索引等。但它们也有很多的类似之处。

PostgreSQL的进程结构:

PostgreSQL系统的主要功能都集中于Postgres程序,其入口是Main模块中的main函数,在初始化数据集簇,启动数据库服务器时,都将从这里开始。Main模块主要的工作是确定当前的操作系统平台,并据此做一些平台相关的环境变量设置和初始化。然后通过对命令行参数的判断,将控制转到相应的模块中去。图是PostgreSQL系统主函数main的流程.

"postgresqlProcess"

PostgreSQL使用一种专用服务器进程体系结构,其中,最主要的两个进程就是守护进程Postmaster和服务进程Postgres。从本质上来说,Postmaster和Postgres都是通过装入Postgres程序而形成的进程,只是在运行时所处的分支不同而已。守护进程Postmaster负责整个系统的启动和关闭。它监听并接受客户端的连接请求,为其分配服务进程Postgres.服务进程Postgres接受并执行客户端发送的命令。它在底层模块(如存储,事务管理,索引等)之上调用各个主要的功能模块(如编译器,优化器,执行器等)(如下图所示),完成客户端的各种数据库操作,并返回执行结果。

"postgresql"

PostgreSQL守护进程Postmaster(单用户模式的Postgres进程)除为用户连接请求分配后台Postgres服务进程外,还将启动相关的后台辅助进程。守护进程Postmaster在完成基本环境初始化,创建接受用户请求的监听端口后,顺序启动如下系统辅助进程:SysLogger(系统日志进程)、PsStat(统计数据收集进程)、AutoVacuum(系统自动清理进程)。在守护进程Postmaster进入到循环监听中启动如下进程:BgWriter(后台写进程)、WalWriter(预写式日志写进程),PgArch(预写式日志归档进程)。

守护进程PostMaster:

Postmaster就像一个处理客户端请求的调度中心。当客户端程序需要对数据库进行操作时,首先会发出一个起始消息给Postmaster进行请求。Postmaster将根据这个起始消息中的信息对客户端进行验证,如果身份验证通过,Postmaster就为该客户端新建一个服务进程Postgres。随后Postmaster将与客户端的交互工作转交给Postgres服务进程,由Postgres来完成客户端所需要的数据库操作。

PostgreSQL请求–响应模型

"postmaster"

Postmaster也负责管理整个系统范围的操作,例如中断等操作,Postmaster本身不进行这些操作,它只是指派一个子进程在适当的时间去处理它们。同时它要在数据库崩溃的时候重启系统。Postmaster进程在起始时会建立共享内存和信号库,Postmaster及其子进程的通信就通过共享内存和信号来实现。这种多进程设计使得整个系统的稳定性更好,即使某个后台进程崩溃也不会影响系统中其他进程的工作,Postmaster只需要重置共享内存即可从单个后台进程的崩溃中恢复。

Comments