📜  PostgreSQL –系统架构

📅  最后修改于: 2021-08-25 17:55:04             🧑  作者: Mango

PostgreSQL是具有对象关系性质的开源数据库管理系统。 PostgreSQL是最早的系统之一(即POSTGRE系统)的继承者。它是使用最广泛的开源数据库管理系统之一。

PostgreSQL有一个客户端-服务器架构模型。用最简单的术语来说,PostgreSQL服务具有两个进程:

  • 服务器端流程:这是“ Postgres”应用程序,用于管理连接,操作以及静态和动态资产。
  • 客户端流程(前端应用程序):这些是用户用于与数据库进行交互的应用程序。它通常具有简单的UI,通常用于通过API在用户和数据库之间进行通信。

客户端流程:

当用户在PostgreSQL上运行查询时,客户端应用程序可以连接到PostgreSQL服务器(Postmaster守护进程),并通过PostgreSQL支持的许多数据库客户端应用程序程序接口之一(例如JDBC,Perl DBD,ODBC等)提交查询。提供客户端库。在客户端流程中,客户端应用程序和客户端应用程序库之间的通信在库API的帮助下进行,如下图所示:

PostgreSQL系统架构

1. Postmaster守护进程:

PostgreSQL的系统架构基于每次传输过程模型(客户端/服务器模型)。一个运行中的PostgreSQL站点由Postmaster管理,这是一个中央协调过程。也称为服务器进程。

postmaster守护程序进程负责:

  • 初始化服务器
  • 关闭服务器
  • 处理来自新客户端的连接请求。
  • 执行恢复。
  • 运行后台进程。

共享内存:共享内存是多个程序同时访问的内存,目的是提供快速有效的结果,并减少冗余。这是为数据库缓存和事务日志缓存保留的内存。在PostgreSQL中,使用共享磁盘缓冲区和共享表,其工作方式说明如下:

共享磁盘缓冲区:共享磁盘缓冲区的目的是最大程度地减少磁盘输入/输出,如果不使用磁盘输入/输出,则磁盘输入/输出会花费更多时间,从而导致冗余和效率低下的系统。使用共享缓冲区的优点是:

  • 减少时间。
  • 可以轻松访问大量数据。
  • 当多个用户同时访问时,将热量降到最低。

共享表:此方法涉及使用同一组表来承载多个客户端数据。使用此方法的主要优点是:

  • 最低的硬件成本
  • 最低的备份成本
  • 它允许在单个数据库中处理大数据。

UNIX系统:在UNIX系统内核磁盘缓冲区中,维护内存缓冲区并为磁盘存储中的数据提供物理存储。此外,还要验证PostgreSQL的命令语法是否正确,并提供错误消息,说明命令中缺少什么内容,等等。

2.后端流程:

Postmaster负责处理初始客户端连接。为此,它不断侦听作为已知端口的新连接。在执行初始化过程(例如,对用户进行身份验证)之后,邮局主管将引发一个新的后端服务器进程来处理新客户端。客户端仅与后端服务器进程交互,例如提交查询和接收查询结果。这将表明PostgreSQL实际上使用了“每次事务处理”模型。

后端服务器负责通过执行特定操作来执行客户端提交的查询。每个后端服务器一次只能处理一个查询。一次,多个客户端连接到系统,因此多个后端服务器同时执行查询。后端服务器从位于共享内存中的主内存缓冲池访问数据。

之后,将获得的结果通过后端流程提供给客户端流程。

   WAL(Write Ahead Log)Writer                       This process Write and flushes WAL Data on WAL buffer                                                                                                                                                
logging collector This process is also called logger. It will write an error message to the log file.
Auto vacuum launcher When auto vacuum is enabled, this process has the responsibility of the auto vacuum daemon to carry vacuum operations on bloated tables. This process relies on the stats collector process for perfect table analysis.
Archiver When  Achiever is enabled, the process has the responsibility to copy WAL log file to the specified directory.
stats collector In this statistics information like pg_stat_activity  and pg_stat_all_tables  is collected
checkpointer  When a checkpoint occurs, the dirty buffer written to the file.
writer It will periodically write the dirty buffer to the file.

3.共享池:

共享池是在启动期间在RAM堆中创建的RAM区域。共享池是SGA(系统全局区域)的组成部分。如果共享池在RAM中不可用或未使用,则将导致高库高速缓存重新加载,高行高速缓存重新加载。共享池是在启动期间在RAM堆中创建的RAM区域。共享池是SGA(系统全局区域)的组成部分。如果共享池在RAM中不可用或未使用,则将导致高库高速缓存重新加载,高行高速缓存重新加载。

为什么PostgreSQL不使用共享池?

PostgreSQL没有提供共享池,尽管像Oracle这样的大多数数据库系统,共享池都是其结构的重要组成部分。它没有,因为与共享池相比,PostgreSQL将提供一种在进程级别共享SQL信息的功能。简而言之,如果用户将在一个进程中多次执行相同的SQL查询,它将仅进行一次硬解析,这比其他数据库系统更具优势,因为在使用共享池的另一个数据库系统中,硬解析发生在一个数据库中。从共享池加载的单个SQL语句。如果用户同时执行多次单个SQL查询,则将导致更多的负载。

4. PostgreSQL中的OID:

OID代表对象标识符类型。 PostgreSQL将OID用作各种系统表的主键。它被实现为一个无符号的四个字节的整数。我们还可以选择在用户定义的表中将OID用作“ WITH OIDS”,但不建议使用,因为它的大小不足以在大型用户定义的表中提供唯一性。 OID通常最适合系统表。基本上,它为系统列中包含的每一行提供了一个内置的ID。

在PostgreSQL 12版本中,用户表的OID功能已间接删除,即我们可以显式使用OID。

PostgreSQL的优点:

  • PostgreSQL是一个高度风险容忍的数据库,并且需要较低的维护成本。
  • 它使用LAMP(Linux,Apache,MySQL, PHP)堆栈执行动态网站和Web应用程序。

PostgreSQL的缺点:

  • 与商业数据库相比,它有点慢。
  • 与MYSQL相比,它不支持各种开源应用程序。