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. 列存储分析需求(列存表优化)

相关推荐
Wang's Blog1 天前
PostgreSQL笔记51: 基于 pgvector 构建企业级智能问答系统
数据库·笔记·postgresql
我星期八休息1 天前
Linux—五种IO模型与非阻塞IO
linux·运维·服务器·网络·数据库·网络协议
SQL-First布道者1 天前
全面解构传统持久层框架,拥抱真正的 SQL-First
java·数据库·spring boot·sql·spring·mybatis·spring jdbc
翼龙云_cloud1 天前
阿里云国际版代理商:OSS自定义域名绑定与HTTPS配置排障教程
数据库·阿里云·https·云计算
日常筹谋记1 天前
ATS选不对运维两行泪:数据中心市电与柴发切换场景的双电源自动转换开关选型笔记
运维·数据库·笔记
小蒜学长1 天前
vue旅游攻略网站(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端·旅游
Wang's Blog1 天前
PostgreSQL笔记50: 基于PGVECTOR的实时推荐与搜索系统构建
笔记·postgresql
山甫aa1 天前
JavaWeb后端开发学习手册
java·开发语言·数据库·学习·mysql·springboot·web
JavaPub-rodert1 天前
MongoDB 常用命令和常见问题大全
数据库·mongodb
Dovis(誓平步青云)1 天前
从Redis指标采集到异常告警:redis_exporter + Prometheus 完整实战
服务器·数据库·人工智能·redis·架构·prometheus·vibe coding