PostgreSQL技术问答40 - Feature Matrix 功能特性矩阵本文分享了一个Postgres官方文档中
本文是《PostgreSQL技术问答》系列文章中的一篇。关于这个系列的由来,可以参阅开篇文章:
文章的编号只是一个标识,在系列中没有明确的逻辑顺序和意义。读者进行阅读时,不用太关注这个方面。
本文主要讨论的内容是在Postgres的Feature Matrix 功能特性矩阵。
什么是Feature Matrix 功能特性矩阵
FM是Postgres官方技术文档中一个非常有趣的内容板块。它使用了一个文档,来描述在Postgres的各个主要大的版本中,一些比较重要和核心功能的实现,这个文档的地址如下:
www.postgresql.org/about/featu…
它还使用了一种非常直观而且比较容易操作的方式,来展示各个特性项目、特性项目所属分类和版本实现之间的关系。
FM有那些主要的分类
从FM的内容上,我们可以一窥Postgres系统设计和构成的各个板块和整体框架,这对于我们理解Postgres系统,特别是其规划和设计特点,是非常有帮助的。
这些板块的具体内容,下面简单例举如下:
- Backend,后端
- Data Types, Functions, & Operators 数据类型,函数和操作符
- Indexing & Constraints, 索引和约束
- SQL,结构化查询语言
- Data Definition Language (DDL), 数据定义
- Performance, 性能
- JSON
- Partitioning & Inheritance, 分区和继承
- Views & Materialized Views, 视图和实体化视图
- Replication,数据复制
- Backup, Restore, & Data Integrity,备份恢复和数据集成
- Data Import & Export,数据导入导出
- Configuration Management, 配置管理
- Security, 安全性
- Transactions and Visibility, 事务和可见性
- VACUUM and Maintenance, 清空和维护
- Foreign Data Wrappers, 外部数据封装
- Custom Functions, Stored Procedures, & Triggers,自定义函数,存储过程和触发器
- Procedural Languages,过程语言
- Extensions,扩展
- Internationalisation, 国际化
- Client Applications,客户端应用
- Additional Modules (contrib), 附加模块
- Network, 网络
- Platforms,平台
通过了解这些板块和构成,可以帮助我们了解和积累以下信息和认知:
- Postgres中,大的功能模块和子系统是如何分类的
- 我们日常涉及到的细节化的功能特性,应当归类于那些板块
- 一个完善成熟的关系型数据库系统,应当有那些部分组成
- 相比于其他的数据库系统,Postgres有那些独特的功能,或者缺失的特性
- 快速检索和查询相关的功能特性的定义和内容
- 可以感受和理解Postgres开发和产品发布的节奏和策略
- 也可以感受Postgres技术发展和演进的过程
在最近的两个版本中,有那些重要的新特性
现有(截至2024-08-27)的最新的两个大版本中,17版本还处于Beta3阶段,16.4已经是可用的正式版本。基于功能特性矩阵,笔者简单总结了一下:
- pg_stat_checkpointer system view: 统计检查点系统视图
- pg_stat_io - I/O metrics view: IO指标视图
- pg_wait_events system view: 等待事件系统视图
- Parallelized CREATE INDEX for BRIN indexes: BRIN索引创建并行执行
- ANY_VALUE aggregate: ANY_VALUE聚合
- Non-decimal integer literals:非数值整数字面量
- SYSTEM_USER: 系统用户
- Underscores (_) for thousands separators: 下划线分隔千分位
- Incremental sort for SELECT DISTINCT: 选择去重的增量排序
- Load balancing for libpq / psql: libpq负载均衡
- Parallel FULL and RIGHT joins: 并行FULL和RIGHT连接
- SIMD support for ARM: ARM平台支持SIMD
- SIMD support for x86: X86平台支持SIMD
- SQL/JSON constructors: SQL/JONS构造器
- SQL/JSON IS JSON: IS JSON方法
- Logical replication avoids replication loops: 逻辑复制避免复制循环
- Logical replication from standbys: 从替补系统逻辑复制
- Logical replication initial sync using binary protocol: 逻辑复杂同步使用二进制协议
- Logical replication lookups with additional indexes: 逻辑复杂查找附加索引
- Logical replication parallel apply of transactions
- Include directives for pg_hba.conf and pg_ident.conf
- Regular expression matching in pg_hba.conf and pg_ident.conf:配置文件支持正则匹配
- Client-specified requirements for authentication: 客户端指定认证需求
- Kerberos credential delegation: Kerberos凭据委托
- Support using the client's OS trusted CA: 支持客户端OS的CA
- Page freezing optimizations:页冻结优化
- Radix tree memory structure for vacuum: Vacuum操作使用Radix树内存结构
- psql \bind: psql bind命令,执行SQL绑定参数
可以看到,大部分都是和性能、安全和新型硬件适配相关的内容,中间有几个亮点:
- 对于SIMD(单指令多数据) CPU的支持,这是现代化CPU的重要特性,对其支持可以大大提升代码数据处理性能
- 更完善的逻辑复制特性
- 增强系统的管理和维护功能
- 协议和客户端安全提升
- 持续的底层系统优化,并行处理,增量处理,负载均衡...
除了了解Postgres的设计和结构之外,还能用来做什么
笔者经常用这个功能矩阵,来了解和学习Postgres在不同版本中,提供了那些新的功能特性。以及某些特性,它的版本支持和演进的情况是怎么样的。
例如我们都知道现在Postgres支持Merge语句了,但从下面的图表我们才能直观的看到,其实是从15版本才开始的。
从这个列表中我们也可以看到,Postgres已经是一个非常完整和成熟的数据库系统了。最近的这些版本,新增和改进的特性,都是很细节化的,或者更好更通用的实现。也可以各个数据库系统之间,也在参照对方,对自己进行改进和完善。所以,在这个意义上,现有成熟主流的数据库系统,对于一般的应用需求,在功能特性这个维度,并没有太大的差异。
当然基于市场和定位的考虑,它可能会原生缺乏一些企业级的功能(例如原生的高可用性和分布式)。但作为一个非常强大和稳定的核心,就和Linux的生态系统一样,可以提供给一些第三方的专业方案商有一些扩展和发挥的空间,这对于整个生态也是有益的。
小结
本文分享了一个Postgres官方文档中,一个重要而有趣的内容和信息板块-Feature Matrix,功能特性矩阵。从这个内容板块中,我们可以看到和理解Postgres的系统架构和功能板块的设计。
转载自:https://juejin.cn/post/7407361968925753385