PostgreSQL体系架构介绍

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PostgreSQL体系架构介绍

PostgreSQL是最像Oracle的开源数据库,我们可以拿Oracle来比较学习它的体系结构,比较容易理解。PostgreSQL的主要结构如下:
在这里插入图片描述

1.存储结构

PG数据存储结构分为:逻辑存储结构和物理存储存储。其中:逻辑存储结构是内部的组织和管理数据的方式;物理存储结构是操作系统中组织和管理数据的方式。

1.1逻辑存储结构

数据库集簇是数据库对象的集合。

  在关系数据库理论中,数据库对象是用于存储或引用数据的数据结构。

  表就是一个例子,还有索引、序列、视图、函数等这些对象。

  在PostgreSQL中,数据库本身也是数据库对象,并且在逻辑上彼此分离。

  除数据库之外的其他数据库对象(例如表、索引等)都属于它们各自的数据库,虽然它们隶属于同一个数据库集簇,但也无法直接从集簇中的一个数据库访问集簇中的另一个数据库对象。

  数据库本身也是数据库对象,一个数据库集簇可以包含多个Database、多个User、每个Database以及Database中的所有对象都有它们的所有者:User。

在这里插入图片描述

  • 创建一个Database时,会为这个Database创建一个名为public的默认Schema,每个Database可以有多个Schema。
  • 在这个数据库中创建其他数据库对象时,如果没有指定Schema,都会在public这个Schema中。
  • Schema可以理解为一个数据库中的命名空间,在数据库中创建的所有对象都在Schema中创建。
  • 一个用户可以从同一个客户端连接中访问不同的Schema。
  • 不同的Schema中可以有多个相同的名称的Table、Index、View、Sequence、Function等数据库对象。

1.2物理存储结构

数据库的文件默认保存在initdb时创建的数据目录中。
在数据目录中有很多类型、功能不同的目录和文件。
除了数据文件之外,还有参数文件、控制文件、数据库运行日志及预写日志等。

1.2.1数据目录

数据目录用来存放PostgreSQL持久化数据,通常可以将数据目录路径配置为PGDATA环境变量。
PGDATA="/var/lib/postgresql/data"

在这里插入图片描述
而PostgreSQL的物理存储结构主要是指硬盘上存储的文件,包括:数据文件、日志文件、参数文件、控制文件、redo日志(WAL)

1.2.2数据文件(表文件)

 先了解两个基础的数据库对象:OID和表空间。

OID

PostgreSQL中的所有数据库对象都由各自的对象标识符(OID)进行内部管理。
它们是无符号的4字节整型数。
数据库对象和各个OID之间的关系存储在适当的系统目录中,具体取决于对象的类型。
数据库的OID存储在pg_database系统表中,可以通过下面代码查询。

select oid, datname from pg_database where datname = '';

数据库中的表、索引、序列等对象的OID存储在pg_class系统表中,可以通过如下代码获取这些对象的oid

select oid, relname, relkind from pg_class where relname ~ 'tb1';

表空间

在PostgresSql中最大的逻辑存储单位是表空间。
数据库中创建的对象都保存在表空间中,如表、索引和整个数据库都可以被分配到特定的表空间中。
在创建数据库对象时,可以指定数据库对象的表空间,如果不指定则使用默认表空间也就是数据库对象的文件的位置。

初始化数据库目录时,会自动创建pg_default和pg_global表空间。

1.2.3 日志文件

logging_collector = on
log_destination = 'csvlog'
log_directory = '/home/postgres/pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_connections = on
log_disconnections = on
log_rotation_age = 1d
log_rotation_size = 20MB

# 记录用户登陆数据库后的各种操作,postgres日志里分成了3类,通过参数pg_statement来控制,
# 默认的pg_statement参数值是none,即不记录,可以设置ddl(记录create,drop和alter)、
# mod(记录ddl+insert,delete,update和truncate)和all(mod+select)。

log_statement = 'all'                   # none, ddl, mod, all

效果如下

[root@k8slys01 pgsmaster]# tail -f log/postgresql-2021-12-09_121245.csv
2021-12-09 12:20:06.077 UTC [47] LOG:  statement: select pg_switch_wal()
2021-12-09 12:20:06.158 UTC [47] LOG:  statement: select oid, datname from pg_database
2021-12-09 12:20:06.161 UTC [38] LOG:  statement: SELECT c.conkey FROM pg_constraint c WHERE c.contype = 'p' and c.conrelid = 1262
2021-12-09 12:20:06.167 UTC [47] LOG:  statement: SELECT * from pg_class
2021-12-09 12:20:06.182 UTC [38] LOG:  statement: SELECT c.conkey FROM pg_constraint c WHERE c.contype = 'p' and c.conrelid = 1259
2021-12-09 12:20:06.184 UTC [47] LOG:  statement: select pg_current_wal_lsn(),
        pg_walfile_name(pg_current_wal_lsn()),
        pg_walfile_name_offset(pg_current_wal_lsn())
2021-12-09 12:21:06.397 UTC [38] LOG:  statement: INSERT INTO "public"."tb_user"("name") VALUES ('33333') RETURNING *
2021-12-09 12:21:06.405 UTC [38] LOG:  statement: SELECT * FROM "public"."tb_user" WHERE "name" = '33333'

更复杂的以后独立写作

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
关系型数据库 分布式数据库 数据库
【PolarDB开源】PolarDB与微服务架构的融合:灵活扩展与高效管理
【5月更文挑战第23天】阿里云PolarDB是适用于微服务的高性能分布式数据库,提供数据分片、水平扩展及高可用性解决方案。通过SQL或API实现弹性扩展,内置故障转移保障服务连续性,且兼容MySQL协议,易于集成微服务生态。通过Spring Boot示例展示了PolarDB的配置与集成过程,强调其在现代云原生应用中的重要角色。
74 1
|
1月前
|
存储 关系型数据库 分布式数据库
电子好书发您分享《PolarDB分布式版架构介绍PolarDB分布式版架构介绍》
**《PolarDB分布式版架构介绍》电子书分享:** 探索阿里云PolarDB分布式设计,采用计算存储分离,借助GMS、CN组件实现大规模扩展。[阅读更多](https://developer.aliyun.com/ebook/8332/116553?spm=a2c6h.26392459.ebook-detail.5.3b3b2ccbVVjjt0)
29 3
|
1月前
|
存储 关系型数据库 分布式数据库
【PolarDB开源】深入PolarDB内核:探究存储计算分离架构的设计哲学
【5月更文挑战第20天】PolarDB是阿里巴巴的云原生分布式数据库,以其存储计算分离架构为核心,解决了传统数据库的扩展性和资源灵活性问题。该架构将数据存储和计算处理分开,实现高性能(通过RDMA加速数据传输)、高可用性(多副本冗余保证数据可靠性)和灵活扩展(计算资源独立扩展)。通过动态添加计算节点以应对业务流量变化,PolarDB展示了其在云时代应对复杂业务场景的能力。随着开源项目的进展,PolarDB将持续推动数据库技术发展。
82 6
|
2天前
|
存储 关系型数据库 分布式数据库
内附原文|详解SIGMOD’24最佳论文:PolarDB如何破解多主架构经典难题?
在今年的SIGMOD会议上,阿里云瑶池数据库团队的论文《PolarDB-MP: A Multi-Primary Cloud-Native Database via Disaggregated Shared Memory》获得了Industry Track Best Paper Award,这是中国企业独立完成的成果首次摘得SIGMOD最高奖。PolarDB-MP是基于分布式共享内存的多主云原生数据库,本文将介绍这篇论文的具体细节。
内附原文|详解SIGMOD’24最佳论文:PolarDB如何破解多主架构经典难题?
|
2天前
|
存储 SQL Oracle
主流关系型数据库存储架构层的差异分析
主流关系型数据库存储架构层的差异分析
|
1月前
|
存储 监控 关系型数据库
关系型数据库设计集群架构节点规划
【5月更文挑战第6天】在实际项目中,可能还需要考虑其他因素,如安全性、合规性、成本等。因此,在进行关系型数据库设计集群架构节点规划时,建议与经验丰富的数据库管理员和架构师合作,以确保项目的成功实施和稳定运行。
32 4
关系型数据库设计集群架构节点规划
|
1月前
|
分布式计算 负载均衡 关系型数据库
关系型数据库设计集群架构需求分析
【5月更文挑战第6天】关系型数据库设计集群架构的需求分析是一个综合考虑业务需求、性能、可用性、可扩展性、数据一致性、安全性、成本效益和技术选型等多个方面的过程。通过深入分析和评估,可以设计出满足业务需求且高效可靠的数据库集群架构。
38 3
关系型数据库设计集群架构需求分析
|
1月前
|
缓存 监控 负载均衡
关系型数据库设计集群架构
【5月更文挑战第5天】关系型数据库设计集群架构
29 3
关系型数据库设计集群架构
|
1月前
|
存储 负载均衡 关系型数据库
关系型数据库设计集群架构架构选择
【5月更文挑战第6天】还可以考虑使用现有的数据库管理系统(DBMS)提供的集群解决方案,如MySQL的InnoDB Cluster、PostgreSQL的Streaming Replication和Patroni等。这些解决方案已经经过了广泛测试和验证,可以大大降低集群架构设计和实现的难度。
34 1
关系型数据库设计集群架构架构选择
|
1月前
|
存储 关系型数据库 分布式数据库
【PolarDB开源】PolarDB高可用架构解析:确保业务连续性的关键设计
【5月更文挑战第22天】阿里云PolarDB是一款高可用、高性能的云原生数据库,采用分布式共享存储架构实现计算与存储分离。通过主从复制保证数据实时同步,当主节点故障时,从节点能快速接管。此外,PolarDB提供自动故障转移和数据备份恢复功能,确保业务连续性和数据安全性。一个简单的Python SDK使用示例展示了查询数据的过程。总之,PolarDB通过多种机制保障了企业在异常情况下的服务稳定和数据完整性。
219 5