Postgresql与openguass对比

背景介绍

PostgreSQL是世界上最先进的开源关系型数据库,以其强大的功能、稳定性和可扩展性著称。而openGauss是华为公司于2020年6月30日开源的数据库系统,内核基于PostgreSQL 9.2.4版本演进而来。值得注意的是,PostgreSQL 11.3版本拥有290个数据库参数,而openGauss当前拥有515个数据库参数,每个参数对应一个数据库内核功能,这表明华为对PostgreSQL内核进行了大量的改造和增强。

内核增强对比

1. 事务ID (XID) 处理

  • **PostgreSQL**:使用32位整数作为事务ID,最大约43亿,可能面临耗尽风险,需要通过vacuum freeze进行循环利用。

  • **openGauss**:将事务ID扩展为64位,实现了XID不可耗尽的特性,彻底解决了事务回卷问题,同时保留了vacuum freeze机制用于清理过期的CSN。

2. 检查点机制

  • **PostgreSQL**:采用全量检查点,执行时会将buffer中所有脏页刷到磁盘,导致性能波动大。

  • **openGauss**:支持增量检查点,通过小批量分阶段的方式进行脏页刷盘,提升了性能稳定性。

3. 页面断裂处理

  • **PostgreSQL**:使用full page write解决页面断裂问题,但会大大增加xlog日志量。

  • **openGauss**:实现了类似MySQL的双写(double write)机制,写数据块的同时将脏页写到共享双写空间中,性能更优。

4. XLOG预分配

  • **PostgreSQL**:XLOG日志在写满后才会分配下一个日志,可能导致性能抖动。

  • **openGauss**:实现了XLOG预分配功能,在日志未写满时就分配下一个日志,提高了性能稳定性。

性能优化

1. 线程池架构

  • **PostgreSQL**:采用进程模型,每个连接对应一个进程。

  • **openGauss**:改为线程模型,支持线程池,实现了session和thread之间的解耦,提高了线程利用率,支持上万并发。

2. NUMA架构优化

  • **openGauss**:通过NUMA绑核减少跨核内存访问时延,提升CPU利用率,改善多线程同步性能。

3. 并行回放

  • **openGauss**:支持备机并行回放日志,提高复制性能。

4. 内存表

  • **openGauss**:支持基于LLVM的内存查询引擎,支持高吞吐、低延迟访问。

5. 列存表优化

  • **openGauss**:支持列存表,并优化了列存表的并发插入性能,解决了插入时一行数据占一个CU导致空间膨胀的问题。

高可用特性

1. 最大可用模式

  • **PostgreSQL**:在一主一从同步模式下,备库宕机会导致主库挂起,同步模式不会自动降级。

  • **openGauss**:支持最大可用模式(most_available_sync),当备机断连时会立刻切换为异步模式,备机恢复后自动恢复同步模式。

2. 流复制自动创建物理复制槽

  • **openGauss**:搭建主从流复制环境后会默认自动创建物理复制槽,防止备库需要的XLOG被主库删除。

3. 主库XLOG容量限制

  • **openGauss**:通过max_size_for_xlog_prune参数控制XLOG最大值,防止主备长期断连导致主库目录爆满。

4. 主备从与一主多备架构

  • **openGauss**:支持主备从模式和一主多备模式,更灵活的高可用架构选择。

安全特性

1. 客户端密码认证增强

  • **PostgreSQL**:默认密码加密算法为MD5。

  • **openGauss**:增强为SHA256,提高了安全性。

2. 流复制线程连接认证

  • **openGauss**:主备复制线程连接默认需要进行SSL认证,增强安全性。

3. Schema权限控制

  • **openGauss**:对public schema进行安全增强,默认普通用户没有权限在public下创建对象。

不足之处

1. 功能缺失

  • **openGauss**:缺少pg_stat_replication视图,无法查看主从延迟信息。

  • **openGauss**:不支持PostgreSQL的并行功能。

  • **openGauss**:没有postgresql.auto.conf,无法使用ALTER SYSTEM SET配置参数。

  • **openGauss**:不支持PITR(基于时间点的恢复)。

2. 插件生态

  • **openGauss**:不支持PostgreSQL插件,这是一个极大的劣势,失去了PostgreSQL强大的扩展性。

3. 社区成熟度

  • **openGauss**:社区刚刚起步,活跃度不高,周边工具(如高可用工具、数据同步工具)不完善。

4. 复杂度与通用性

  • **openGauss**:编译过程复杂,依赖项多且版本固定,跨平台编译难度大,平台通用性差。

应用场景

PostgreSQL适用场景

  1. 需要广泛插件支持的应用

  2. 跨平台部署要求高的场景

  3. 对社区和生态系统依赖性高的场景

  4. 分析类应用(依赖并行查询)

openGauss适用场景

  1. 需要极高并发支持的应用(线程池架构)

  2. 大规模交易处理系统(NUMA优化、增量检查点)

  3. 对主从高可用要求严格的场景(最大可用模式)

  4. 列存储分析需求(列存表优化)

相关推荐
q***99415 分钟前
Spring Boot 实战:轻松实现文件上传与下载功能
java·数据库·spring boot
老华带你飞32 分钟前
记录生活系统|记录美好|健康管理|基于java+Android+微信小程序的记录生活系统设计与实现(源码+数据库+文档)
android·java·数据库·vue.js·生活·毕设·记录生活系统
青春:一叶知秋42 分钟前
【Redis存储】Redis介绍
数据库·redis·缓存
_Minato_1 小时前
数据库知识整理——SQL数据更新
数据库·sql
韩立学长1 小时前
基于Springboot的汽车推荐系统设计与实现7f7h74np(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·汽车
一 乐1 小时前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·后端
有趣的野鸭3 小时前
JAVA课程十一次实验课程主要知识点示例
java·前端·数据库
兰若姐姐4 小时前
cisp-pte之SQL注入题之vulnerabilities/fu1.php?id=1
数据库·sql
数据皮皮侠8 小时前
区县政府税务数据分析能力建设DID(2007-2025)
大数据·数据库·人工智能·信息可视化·微信开放平台
请叫我阿杰9 小时前
Ubuntu系统安装.NET SDK 7.0
数据库·ubuntu·.net