PostgreSQL架构

news2025/5/25 4:13:23

目录

一、PostgreSQL核心特性与优势

1.PostgreSQL简介

2.PostgreSQL的核心特点

(1)开源与自由

(2)高度符合SQL标准

(3)丰富的数据类型

(4)事务与并发控制

(5)扩展性

(6)安全性

3.PostgreSQL的竞争优势

(1)性能优化

(2)高可用性

(3)应用场景多样性

二、PostgreSQL安装全流程解析

1.编译安装(以OpenEuler24系统为例)

(1)环境准备

(2)源码编译

(3)系统配置

(4)初始化与启动

2.DNF安装(以OpenEuler24系统为例)

(1)快速部署

三、PostgreSQL架构深度剖析

1.逻辑结构分层

(1)数据库集群(Database Cluster)

(2)数据库(Database)

(3)模式(Schema)

(4)对象层级

(5)表空间(Tablespace)

2.物理存储机制

(1)数据目录结构

(2)文件类型详解

(3)OID(对象标识符)

3.存储优化实践

(1)表空间管理

(2)分区表设计

(3)索引策略

四、总结与展望


一、PostgreSQL核心特性与优势

1.PostgreSQL简介

PostgreSQL(简称PG)是一款开源的对象关系型数据库管理系统(ORDBMS),起源于加州大学伯克利分校的Ingres项目。经过数十年的发展,PG凭借其强大的功能、高可靠性以及活跃的社区支持,已成为企业级应用的首选数据库之一。其设计哲学强调扩展性、标准符合性与灵活性,支持复杂查询、事务处理及非结构化数据管理,适用于OLTP、OLAP、GIS、物联网等多种场景。

核心历史与发展

  • 起源:基于Ingres的Post-Ingres项目演化而来,首次发布于1996年。
  • 开源特性:遵循PostgreSQL许可证,允许自由使用、修改与分发。
  • 社区驱动:全球开发者共同维护,版本迭代迅速,生态工具链丰富(如PostGIS、TimescaleDB)。

2.PostgreSQL的核心特点

(1)开源与自由

  • 无版权限制:企业可免费用作商业用途,降低技术成本。
  • 可定制性:用户可根据需求修改源码,例如优化查询引擎或集成自定义数据类型。
  • 社区生态:全球开发者贡献插件(如Citus分布式扩展)、文档与技术支持。

(2)高度符合SQL标准

  • 支持复杂语法:包括窗口函数(Window Functions)、公共表表达式(CTE)、递归查询(WITH RECURSIVE)等。
  • 跨版本兼容性:SQL语法兼容ANSI标准,减少迁移成本。

(3)丰富的数据类型

  • 基础类型:整数、浮点数、字符串、布尔值等。
  • 高级类型:
    • JSON/JSONB:支持半结构化数据存储与索引。
    • 几何类型:通过PostGIS扩展支持GIS数据处理。
    • 范围类型(Range Types):如日期范围、数值区间。
    • 数组与枚举:直接存储多维数据与固定值集合。
(4)事务与并发控制
  • MVCC机制(多版本并发控制):
    • 通过事务ID(XID)标记数据版本,实现读写无锁并发。
    • 避免脏读、不可重复读与幻读问题,支持四种隔离级别(如Read Committed、Serializable)。
    • 嵌套事务与保存点:支持事务部分回滚,增强业务逻辑的容错性。

(5)扩展性

  • 插件机制:可动态加载扩展模块(如pg_partman分区管理)。
  • 自定义对象:支持定义新数据类型、操作符、索引方法(如GiST、SP-GiST)。
  • FDW(外部数据包装器):集成外部数据源(如MySQL、MongoDB)为本地表。

(6)安全性

  • 访问控制:基于角色的权限管理(RBAC),细化到列级权限。
  • 加密支持:数据传输加密(SSL)、数据存储加密(pgcrypto模块)。
  • 审计日志:记录用户操作,满足合规性要求。

3.PostgreSQL的竞争优势

(1)性能优化

  • 查询计划优化:基于代价的优化器(CBO)自动选择最优执行路径。
  • 并行查询:支持并行顺序扫描、聚合与JOIN操作,提升大规模数据处理效率。
  • 分区表:按范围、列表或哈希分区,减少全表扫描开销。

(2)高可用性

  • 流复制:主从异步/同步复制,支持级联复制架构。
  • 逻辑复制:跨版本数据同步,支持表级订阅(如pglogical插件)。
  • 故障切换:结合Patroni或pgPool实现自动故障转移。

(3)应用场景多样性

  • 企业应用:ERP、CRM系统依赖ACID事务保障数据一致性。
  • 数据分析:支持窗口函数与物化视图,适配OLAP场景。
  • GIS应用:通过PostGIS扩展实现空间数据索引与计算。
  • 物联网:时序数据高效存储(TimescaleDB插件)。

二、PostgreSQL安装全流程解析

1.编译安装(以OpenEuler24系统为例)

(1)环境准备

  • 依赖安装
yum -y install gcc make libicu-devel readline-devel zlib-devel

(2)源码编译

  • 解压与配置:
tar zxvf postgresql-16.3.tar.gz
cd postgresql-16.3
./configure --prefix=/usr/local/pgsql

(3)系统配置

  • 用户与目录:
useradd postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
  • 环境变量:
# 共享库与路径配置
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
export PATH=/usr/local/pgsql/bin:$PATH

(4)初始化与启动

postgresql-setup --initdb
systemctl start postgresql
su - postgres
psql
  • 初始化数据库集群:
su - postgres
initdb -D /usr/local/pgsql/data
  • 启动服务:
pg_ctl -D /usr/local/pgsql/data -l logfile start
psql  # 进入交互式终端

2.DNF安装(以OpenEuler24系统为例)

(1)快速部署

  • 安装包管理:
dnf install -y postgresql-server
  • 初始化与启动
postgresql-setup --initdb
systemctl start postgresql
su - postgres
psql

编译安装vsDNF安装

  • 灵活性:编译安装支持自定义路径与优化参数,适合生产环境。
  • 便捷性:DNF安装适合快速部署测试环境,但版本可能滞后。

三、PostgreSQL架构深度剖析

1.逻辑结构分层

(1)数据库集群(Database Cluster)

  • 定义:由单个PostgreSQL实例管理的数据库集合,包含全局系统表(如pg_database)。
  • 物理映射:对应数据目录(如/usr/local/pgsql/data)。

(2)数据库(Database)

  • 独立性:数据库之间逻辑隔离,无法跨库直接查询。
  • 模板库:
    • ​​​​​​​template0:纯净模板,用于恢复损坏的数据库。
    • template1:默认模板,新建数据库时复制其结构。

(3)模式(Schema)

  • 命名空间隔离:同一数据库内,不同模式可包含同名对象(如表、视图)。
  • 权限控制:模式级权限管理,限制用户访问范围。

(4)对象层级

  • 表与索引:数据存储核心,支持堆表与索引组织表(IOT)。
  • 函数与触发器:通过PL/pgSQL编写业务逻辑。

(5)表空间(Tablespace)

  • 物理解耦:表空间将逻辑对象映射到独立存储路径(如SSD与HDD分离)。
  • 默认表空间:
    • ​​​​​​​pg_default:用户表与索引默认存储位置。
    • pg_global:存储系统目录(如pg_control)。

2.物理存储机制

(1)数据目录结构

  • .核心目录:
    • base/:各数据库子目录(以OID命名),存储表与索引文件。
    • global/:全局系统表(如pg_database、pg_authid)。
    • pg_wal/:预写日志(WAL),保障事务持久性与崩溃恢复。
    • pg_tablsc/:表空间符号链接目录。

(2)文件类型详解

  • 数据文件:
    • ​​​​​​​表文件(如16384)由多个Page(8KB块)组成,包含元组(Tuple)与空闲空间映射。
    • 辅助文件:.vm(可见性映射)、.fm(空闲空间管理)。
  • 配置文件:
    • ​​​​​​​postgresql.conf:核心参数(内存、并发连接数)。
    • pg_hba.conf:客户端认证规则(IP、SSL、密码策略)。

(3)OID(对象标识符)

  • 唯一性:4字节无符号整数,标识数据库、表、索引等对象。
  • 系统表查询:
SELECT datname, oid FROM pg_database;  -- 查看数据库OID
SELECT relname, oid FROM pg_class;     -- 查看表OID

3.存储优化实践

(1)表空间管理

  • 自定义空间:
CREATE TABLESPACE mytbs LOCATION '/mnt/ssd_data';
CREATE TABLE mytable (...) TABLESPACE mytbs;
  • 优势:隔离热点数据至高性能存储,优化IO效率。

(2)分区表设计

  • 范围分区:
CREATE TABLE logs (log_date DATE) PARTITION BY RANGE (log_date);
CREATE TABLE logs_2023 PARTITION OF logs FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
  • 查询优化:分区裁剪减少扫描数据量。

(3)索引策略

  • 多类型索引:
    • ​​​​​​​B-Tree:默认索引,适合范围查询。
    • GiST:支持地址数据与全文搜索。
    • BRIN:块范围索引,适合时序数据。

四、总结与展望

PostgreSQL凭借其开源特性、功能完备性与高性能,已成为现代数据架构的核心组件。从安装部署到存储优化,从逻辑设计到物理管理,其多层次架构设计体现了数据库技术的精髓。未来,随着云原生与分布式需求的增长,PostgreSQL将通过扩展(如Citus、CockroachDB兼容层)持续引领数据库技术演进,为开发者与企业提供更强大的数据服务能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2385078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Runtipi - 开源个人家庭服务器管理工具

项目功能:家庭服务器管理 ▎项目介绍: 一个开源的个人家庭服务器管理工具,旨在简化在单一服务器上管理和运行多个服务的过程。 它基于 Docker 构建,提供了一个简单的 Web 界面,用户可以通过该界面轻松添加和管理服务…

HJ106 字符逆序【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ106 字符逆序 一、题目描述 二、测试用例 三、解题思路 基本思路:   考虑到可能会有多个空格,使用使用 getline 函数直接读取一行。   如果可以直接打印的…

力扣HOT100之二叉树: 236. 二叉树的最近公共祖先

果然,这道题二刷还是不会做,回去看卡尔视频了。结合灵神的题解,我对这道题有了一些新的理解。 首先这道题还是用递归来做,由于我们需要计算两个节点的最近公共祖先,一定是从下往上来遍历,只有先判断左右子树…

腾讯音乐一面

1、自我介绍项目(省略) 2、为什么存储要从TiDB迁移到Mysql? TiDB 迁移至 MySQL 核心原因总结: 成本优化 TiDB 需多节点集群(PD/TiKV/TiDB Server),硬件、运维及学习成本高。中小业务&#xff08…

Pluto实验报告——基于2ASK的简易的通信系统

一、实验目的 1. 熟悉并掌握PLUTO SDR 主动学习模块的使用; 2.通过matlab 编码与adalm pluto 相配合达成一个简易的通信系统,并能 够传输一些较为简单的信息。 二、实验原理 2ASK 调制原理: 振幅键控是指利用载波的振幅变化来传递数字基带信…

深入了解redis的哈希槽的知识

目录 1、哈希算法分类 1.1、简单哈希算法 1.2、一致性哈希算法 1、原理: 2、解决问题 3、数据倾斜问题 4、虚拟节点 2. 哈希槽 2.1、介绍 2. 2、作用 1、数据分片(Sharding) 2、高可用性(HA) 3…

农业机械化、电气化和自动化知网英文普刊:1天录用,2周见刊发表!

CSP科学出版社,旨在通过为研究人员提供最佳环境来发表、参考、阅读和引用他们的作品,从而为科学界服务。现已与科检易学术达成出版战略合作,现在联合共同出版高质量学术水平的期刊,为方便广大科研学者投稿方便,现已经建…

Docker-Compose使用自定义网桥后在OpenWrt系统中容器无法访问网络解决方案

Docker-Compose使用自定义bridge网桥后在OpenWrt系统中容器无法访问网络解决方案 示例compose描述文件如下,注意最后网络配置: # docker-compose --env-file .env.yoko.prod.local up -d services:...postgres:image: kuluseky/postgres-zhparser-post…

界面组件DevExpress WPF中文教程:Grid - 行和卡片

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Qt enabled + geometry 属性(2)

文章目录 enabled属性可用与禁用的概念API接口代码演示 阐述说明1. 先简单描述下要如何演示出上面两个接口的效果(思路)2. 事先规范按钮对象的命名3. 定义两个按钮对象的槽函数 动图演示效果4. widget.cpp geometry属性预备知识API接口上下左右移动 ta…

Llamaindex自学笔记(完)

Llamaindex框架主要做RAG,工作流用LangGraph做 换源: -i https://pypi.mirrors.ustc.edu.cn/simple/环境搭建: conda create -n llamaindex python3.12 conda activate llamaindexpip install llama-index pip install llama-cloud-servic…

飞书知识问答深度测评:企业AI应用落地的“范本级”产品

前言 当 AI 逐渐从技术前沿走向日常办公,我们最常听到的一个词是“效率提升”。但真正能做到降本增效、让企业员工切实受益的 AI 产品,仍属少数。尤其是在组织内部知识管理这一块,大多数企业仍停留在“搜索靠关键词、记录靠记忆、协作靠问人…

draw.io的基础与进阶使用指南

前言 一、Draw.io 简介 Draw.io 是一款功能强大的绘图工具,支持在线使用和本地安装。它提供了丰富的模板和形状元素,能够绘制流程图、UML 图、甘特图、网络图等多种图形。Draw.io 的文件格式支持可编辑的矢量图和位图,方便后续修改 draw.io的…

Sanitizers

一、简介 sanitizers 是谷歌提供的一套开源工具,能够发现堆栈读写溢出、内存泄漏、线程数据竞争和死锁等问题。包括: AddressSanitizers (Asan):检测地址相关问题,如use-after-free,heap-buffer-overflow, stack_buffer_overflow,use_after_…

pip代理出现问题 ProxyError

WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by ‘ProxyError(‘Cannot connect to proxy.’, NewConnectionError(’<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f8347ad5ae0>: F…

vue+threeJS 创建镂空球体(SphereGeometry)

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“vuethreeJS 创建镂空球体&#xff08;SphereGeometry&#xff09;”。 上次看到一个做镂空球体的项目&#xff0c;自己也准备尝试着做一做。今天终于做完了&#xff0c;并对这个项目进行梳理。 镂空球体示例效果…

[ Qt ] | 常见控件(一)

目录 Widget enable geometry 标题中的&#xff1a;有一不一定有二&#xff0c;但是有一说明还没结束。 Widget 控件(Widget)&#xff0c;是界面上各种元素&#xff0c;各种部分的统称。 Qt中的控件都是继承自QWidget这个类&#xff0c;是Qt控件体系中&#xff0c;通用的…

【八股战神篇】Java虚拟机(JVM)高频面试题

目录 专栏简介 一 请解释Java虚拟机(JVM)及其主要功能 延伸 1. JVM的基本概念 2. JVM的主要功能 二 对象创建的过程了解吗 延伸 1.Java 创建对象的四种常见方式 三 什么是双亲委派模型 延伸 1.双亲委派机制的作用: 2.双亲委派模型的核心思想: 3.双亲委派模型的…

NDVI谐波拟合(基于GEE实现)

在遥感影像中&#xff0c;我们常用 NDVI&#xff08;归一化植被指数&#xff09;来衡量地表植被的绿度。它简单直观&#xff0c;是生态监测、农情分析的基础工具。但你是否注意到&#xff1a; NDVI 虽然“绿”&#xff0c;却常常“乱”。 因为云层、观测频率、天气干扰&#xf…

南京邮电大学《智能控制技术》期末抢救(上)

一、智能控制的提出 传统控制方法包括经典控制和现代控制——基于被控对象精确模型的控制方式&#xff0c;缺乏灵活性和应变能力&#xff0c;适于解决线性、时不变性等相对简单的控制问题。传统控制方法在实际应用中遇到很多难解决的问题&#xff0c;主要表现以下几点&#xff…