数据库修仙炼气篇一——postgresql架构

【postgres】docker desktop全部署后端MVC + postgres + Adminer可视化数据库 绿色的大框是后端MVC架构的文件,可以看到从上到下有controllers,有数据库的ORM(database.js,用的是nodejs的sequelize),有models,还有routes(中间件express起作用的地方),没有视图层(MVC的V),因为我们没有写前端页面,这里仅提供后端服务。adminer是别人用php写的,相当于前后端部署在容器里,对8080端口监听,然后把容器里的8080端口映射到PC上的8080端口,因此我们能打开浏览器用http://127.0.0.1:8080/访问。 阅读详情

postgresql架构

整体模式

postgresql采用C/S架构(客户端/服务端)模式。应用层通过INET或者Unix Socket利用既定的协议与数据库服务器进行通信。

postgresql把客户端称为前端,把服务端称为后端。前端通过调用libpq来与后端通信。
后端由多个进程组成,前端发送网络数据报文(查询请求)到后端,后端解析请求后回复相应的报文。

postgresql后端进程

  • postgres主进程(postmaster)

管理后端的常驻进程,也称为’postmaster’。
其默认监听UNIX Domain Socket和TCP/IP(Windows等,一部分的平台只监听tcp/ip)的5432端口,等待来自前端的的连接处理。
监听的端口号可以在PostgreSQL的设置文件postgresql.conf里面可以改。

当有前端连接过来的时候,postmaster会fork一个子进程来处理前端的连接请求。并通过共享内存进行进程间通信。

  • postgres子进程

子进程根据pg_hba.conf定义的安全策略来判断是否允许进行连接,根据策略,会拒绝某些特定的IP及网络,或者也可以只允许某些特定的用户或者对某些数据库进行连接。

  • 辅助进程

    • writer process
    • WAL wriiter process
    • archive process
    • stats collector process
    • logger process
    • autovacuum
    • wal sender/wal receiver

启动流程

main
PostmasterMain
SysLogger_Start
fork_process
InitPostmasterChild
SysLoggerMain
maybe_start_bgworkers
ServerLoop
StartAutoVacLauncher
MaybeStartWalReceiver
StartCheckpointer
StartBackgroundWriter

后端处理流程

  1. 接收前端发送过来的请求报文
  2. parse模块进行文本解析,得到查询树
  3. analyze模块进行分析处理
  4. 通过查询语句的重写实现视图和规则
  5. 查询优化,优化查询树
  6. executor执行处理
  7. 返回执行结果给前端
  8. 重复步骤1-7

后端运行主要逻辑

  1. initdb初始化一个数据库,创建data目录、模板数据库、默认用户、默认配置文件,主要涉及内容如下:
  • pg_wal:存放wal日志

  • base:存放表数据

  1. postgresql采用先写wal日志,再写数据的方式;通过保证wal数据库写入的方式来保证数据写入,并通过wal日志可以进行数据redo和undo;

  2. initdb初始化数据目录后,可以通过pg_ctl启动后端服务进程;

  3. 后端服务进程首先是启动了一个postgres进程,该进程会fork出startup、logger、bgwriter、walwriter、walreceiver等子进程,并通过共享内存和信号进行通信,同时该进程还会监听配置的ip和端口;

  4. postgres进程启动后会先启动startup进程,startup进程会读取control文件,确认是否需要恢复,即是否还有wal日志还没有转换为数据,若有或者配置recovery,则需要根据对应的control信息和检查点信息,找到离检查点或配置的最近的lsn,再根据lsn找到对应wal日志进程redo;

  5. redo完成后,若开启了流复制,则startup进程将唤醒walreceiver进程,walreceiver获取到最新的lsn后,将和主库walsender进程进行wal同步;

  6. postgres启动walreceiver进程时,walreceiver会和另外一个postgres服务端建立连接,另一端将会启动一个walsender进程来进行流复制同步;

【PostgreSQL体系架构 一】 本文主要介绍了PostgreSQL系统架构,包括整体架构,包括实例结构(进程与内存)、存储结构(物理与逻辑)以及插件式存储引擎等等。PostgreSQL 支持表空间, 相比较其他 RDBMS 不同.PostgreSQL 中的表空间是一个目录,其中包含基本目录职位的一些数据.是一个用户管理数据对象(如表,索引等) 物理存储位置的概念PG 在物理存储上引入 tablespace 的概念,可以指定表的存储路径,默认时 pg_default ,也可以自定义 talespace. 阅读详情

相关推荐

安鸾渗透测试平台-CTF系列-bash

工具Xshell 公网VPS接收反弹shell Xshell新手的下载及安装教程(超详细)_新手程序员攀爬之路的博客-优快云博客_xshell使用教程 Xshell连接后 #!/bin/bash cat ${0} while : do echo "$" read input output=`$input` 显示了一个文件,不过咋做呢?这里可能考察的是linux的语法 方法 输入bash 获得shell cat ${0} while : do .

AAAAAAAAAAAA66的博客 2689

毕设进程:后端连接到PostgreSQL数据库

已经搞定

help_HELP_的专栏 1688

手把手教你配置SAP EWM HU类型及号段分配(含常见错误排查)

本文详细介绍了SAP EWM系统中HU类型及号段分配的配置方法,包括环境准备、包材主数据配置、存储类型关联及号段管理。通过实战案例和常见错误排查,帮助用户高效完成HU配置,提升仓储管理效率。重点讲解了EWM后台配置和号段配置的关键步骤与技巧。

weixin_33670786的博客 443

设计模式总结

Iterator模式

每一个不曾起舞的日子,都是对人生的辜负。 896

图文带你理解什么是Few-shot Learning

Few-shot Learning(少样本学习)是Meta Learning(元学习)中的一个实例1,所以在了解什么是Few-shot Learning之前有必要对Meta Learning有一个简单的认识。不过在了解什么是Meta Learning之前还是要了解一下什么是Meta。因此,阅读本文后你将对如下知识有一个初步的了解。 What is Meta What is Meta Learning What is Few-shot Learning 1. What is Meta? meta就是描述

Pr4da的博客 1万+

Imatest-Star模块(西门子星图)

星图分析指南:基于ISO12233标准的MTF测试方法,通过放射状射线和正弦灰度变化评估相机SFR性能。

weixin_64706696的博客 1574

python连接Oracel、postgreSQL、SQLserver、Mysql、mongodb、redis等常用数据库方法汇总!

在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat;Oracle的客户端工具PL/SQL Developer;MSSQL的客户端工具查询分析器等。目前大家使用的大都是C/S单机版的客户端工具,要连数据库的电脑都要安装客户端工具,navicat还比较好安装,而Oracle客户端工具安装就比较麻烦了。 python对接常用数...

小胖七少爷的博客 626

MATLAB机械臂建模实战:标准D-H法与改进D-H法到底选哪个?(附代码对比)

本文深入解析MATLAB中机械臂建模的标准D-H法与改进D-H法的本质区别,提供详细的代码对比和可视化结果。通过实际案例,帮助读者根据应用场景选择合适方法,并避免常见建模陷阱。特别关注Link函数和SerialLink工具的使用技巧,提升机械臂建模效率。

grape的博客 1121

【亲测免费】 DuckDB Postgres 扩展:无缝连接 Postgres 数据库

DuckDB Postgres 扩展:无缝连接 Postgres 数据库 项目介绍 DuckDB Postgres 扩展是一个强大的工具,它允许 DuckDB 直接读取和写入运行中的 Postgres 数据库实例中的数据。通过这个扩展,用户可以在 DuckDB 中直接查询 Postgres 数据库中的数据,或者将数据从 Postgres 表加载到 DuckDB 表中,反之亦然。这种无缝集成极大地简...

gitblog_00253的博客 1563

QT+QTimer+QThread实现线程内的定时任务并且和主线程进行交互

在制作qt软件时,我们经常会用到qtimer定时器以及将其在非主线程中进行使用,甚至有的时候还需要和主线程进行交互。我总结了两种用法,仅供参考。以上即为QTimer和QThread联合使用的学习记录。

u011826081的博客 5685

Dify 第 4 篇 Dify 示例:数据库执行Agent

本文介绍了如何在Dify平台创建一个能够执行SQL查询的数据库Agent。通过安装并配置"通义千问"和"数据库"两个插件,实现自然语言到SQL语句的转换和执行。关键步骤包括:1)安装插件并配置API Key;2)设置默认数据库连接(建议使用只读账号);3)准备测试数据表结构。该Agent支持通过工具调用查询表结构、转换自然语言为SQL、执行查询并返回结果,同时提供了CSV查询和HTTP API接口功能。文中还提供了MySQL测试数据表的创建脚本和示例数据。

甘蓝的专栏 1160

数据库修仙炼气篇十——repmgr

repmgr repmgr用于管理 PostgreSQL 服务器集群内的复制和故障转移。repmgr 支持并增强了 PostgreSQL 的内置流复制,它提供了一个单一的读/写主服务器和一个或多个只读备用服务器。 repmgr 流复制管理工具对 PostgreSQL 集群节点的管理是基于分布式的管理方式。集群每个节点都具备一个 repmgr.conf 配置文件,用来记录本节点的 ID、节点名称、连接信息、数据库的 PGDATA 目录等配置参数。在完成参数配置后,就可以通过 repmgr 命令实现对集群节点的

growdu的网络博客 2019

用Python爬取政府采购信息的实战全流程

以 Playwright 自动采集政府采购信息结构化存储与查询可拓展关键词过滤与通知机制。

2201_76125261的博客 1150

数据库修仙炼气篇八——postgresql之IO调优

检查点是数据库的关键行为,同时也是IO敏感的;其保证了数据库的一致性状态,定期执行检查点是很重要的,确保数据变化持久保存到磁盘中并且数据库的状态是一致的。不当的检查点配置会导致IO性能问题。我们需要关注检查点的配置,确保没有任何IO的尖刺(这同样也取决于磁盘性能的好坏,以及数据文件的组织)。统自动执行checkpoint之间的最大时间间隔。系统默认值是5分钟,这个值可以在压测过程中调大,尽量避免执行checkpoint争抢IO。

growdu的网络博客 1744

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数据库修仙炼气篇三——postgresql进程之BgWriter

BgWriter Bgwriter是一个Background Writer进程的简称,Bgwriter会定时将缓存中一些已经更改的数据(脏缓冲区)写入到磁盘。 BgWriter是postmaster通过fork创建的子进程。 源码分析 启动 主进程fork子进程 #mermaid-svg-MeTM8vpGMQzNuLFf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

growdu的网络博客 1047

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数据库修仙炼气篇六——walsender

pg_walsender 交互接口 全局变量 /* global state */ extern PGDLLIMPORT bool am_walsender; // 是否是walsender进程 extern PGDLLIMPORT bool am_cascading_walsender; // 是否是级联walsender extern PGDLLIMPORT bool am_db_walsender; // 是否连接到数据库 extern PGDLLIMPORT bool wake_wal_sender

growdu的网络博客 431

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据库修仙炼气篇七——replication

pg_replication 基本概念 逻辑复制 逻辑复制是将数据重新执行一次insert、update或delete。逻辑复制则允许在数据层面复制,并在安全性上提供更细粒度的控制。 流复制(物理复制) 实现方式是将wal日志中记录的内容按照确切的块地址逐字节的拷贝到备库,因此主备之间数据分布是一致的,这意味着在主备机器上,同一条记录的ctid是相同的。 逻辑解码 逻辑解码是提取数据库表的所有永久修改到一个连贯的、容易理解的格式 (不需要详细的数据库内部状态知识就可以解读)的过程。 复制槽

growdu的网络博客 1484

数据库修仙炼气篇十一——postgresql 存储管理

pgsql 存储管理 内存管理 包括共享内存、本地内存、内存上下文、缓冲区的管理。 共享内存 共享内存中存储了所有进程的公共数据,例如锁变量、进程通信状态、共享缓冲区中的页面块等。 本地内存 为每个后台进程所专有,是他们的工作区域,存储着属于该进程的Cache(高速缓存)、事务管理信息、进程信息等 内存上下文 内存上下文(MemoryContext)用于统一管理内存分配和回收。 缓冲区 磁盘中的文件块读入内存,被存放在缓冲区中, 称之为页面块或缓冲块。一个标准缓冲块大小为8K。PG设立了共享

growdu的网络博客 1496

数据库修仙炼气篇四——WalWriter

WalWriter 预写式日志WAL机制是对数据文件的修改必须是只能发生在这些修改已经记录到日志之后,即先写日志再写数据。 WalWriter进程负责定期从WAL缓冲区写出日志,并确定写出日志的起点和终点来调用XlogWriter将日志写入到磁盘。 参数配置 wal_level 控制wal存储的级别。wal_level确定有多少信息被写入到WAL。默认值是replica,它添加了WAL归档信息,包括只读服务器(流复制)所需的信息。还可以将其设置为minimal,即只写入从崩溃或立即关闭中恢复所需的信息。

growdu的网络博客 660

数据库修仙炼气篇二——postgresql基本操作与基本对象

postgresql是一个C/S架构的大型软件,提供数据存储索引和查询的功能。postgresql分为客户端和服务端,客户端叫作psql,或者其他语言基于odbc,jdbc,libpq开发的客户端程序,服务端叫作postgres,需要监听ip和端口,通过tcp网络协议与客户端进行通信。在网络通信之上,采用sql作为数据通信协议,支持增删改查。sql针对的是结构化数据,因而要先有数据结构,这里其实就是表。为了对表进行隔离,由将表划分到不同的数据库里。客户端和服务端通信需要验证,验证采用用户名和密码的方式。

growdu的网络博客 588

数据库修仙炼气篇九——postgresql流复制同异步分析

postgresql流复制同异步详解。

growdu的网络博客 593

数据库修仙炼气篇五——pg_walreceiver

pg_walreceiver 启动流程 启动receiver进程 #mermaid-svg-pZwpfiroRFQyO6to {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pZwpfiroRFQyO6to .error-icon{fill:#552222;}#mermaid-svg-pZwpfiroRFQyO6to .error-text{fill:#552222;str

growdu的网络博客 524

数据库修仙炼气篇十二——数据库数据完整性问题(块折断)

数据库数据完整性问题(块折断) 数据库保证数据库完整性(解决块折断问题)当前主要有如下三种方式: 操作日志加double write机制(mysql采用该机制); 操作日志加full page write机制(postgresql同时采用这两种机制); 混合方式,既支持操作日志加double write,又支持操作日志加full page write(openguass采用该机制); 基本概念 块折断 数据库在将数据写入磁盘时一般是按page写入磁盘的,而page的大小一般与操作系统的文件块

growdu的网络博客 1023

python操作数据库教程_Python 操作 PostgreSQL 数据库示例【连接、增删改查等】

本文实例讲述了Python 操作 PostgreSQL 数据库。分享给大家供大家参考,具体如下:我使用的是 Python 3.7.0PostgreSQL可以使用psycopg2模块与Python集成。sycopg2是用于Python编程语言的PostgreSQL数据库适配器。psycopg2是非常小,快速,稳定的。 您不需要单独安装此模块,因为默认情况下它会随着Python 2.5.x版本一起发布...

weixin_39986169的博客 296

PostgreSQL基础+部署

基础环境搭建

faoids的博客 2380

三、PostgreSQL数据库体系结构(一)

PostgreSQL数据库体系结构

lltfjsy的博客 1907
上一篇: 数据库修仙金丹篇一——vpp开发指南
下一篇: 数据库修仙炼气篇十——repmgr
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在数据库世界里修仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值