GaussDB与OpenGauss:华为数据库双雄解析

华为数据库GaussDB和OpenGauss对比:商业版GaussDB主打企业级,开源版OpenGauss面向社区,两者性能和扩展性俱佳。

原文标题:简要对比下GaussDB和OpenGauss数据库

原文作者:牧羊人的方向

冷月清谈:

GaussDB和OpenGauss都源自华为,但它们面向不同的用户群体和应用场景。GaussDB是商业版,定位于企业级分布式关系型数据库,提供高性能、高可用性、高安全性以及PB级海量存储,特别适用于金融、电信等核心业务系统。它基于PostgreSQL内核深度优化,并衍生出多CN架构,支持分布式事务和同城跨AZ部署,保证数据零丢失,具备强大的扩展能力,可支持1000+节点扩展。

OpenGauss是GaussDB的开源版本,其底层架构和数据存储与PostgreSQL类似,但在性能和扩展性方面进行了优化,例如优化线程池模型以支持高并发访问,NUMA适配提升信创服务器性能,支持列存和内存引擎以满足HTAP场景,并优化了查询优化器。它更侧重于社区驱动和开源生态建设,适合对成本敏感、需要灵活性和可控性的用户,如中小企业和个人开发者。

两者在组件类型、部署架构和功能特性上也存在差异。GaussDB包含协调节点(CN)、数据节点(DN)、全局事务管理器(GTM)等组件,支持分布式部署;而OpenGauss主要采用主备部署。GaussDB提供更丰富的企业级特性和专业的技术支持服务,而OpenGauss依赖社区支持。

怜星夜思:

1、如果我的业务规模不大,选择OpenGauss是否足够?在哪些情况下需要考虑GaussDB?
2、OpenGauss与PostgreSQL的兼容性如何?迁移成本高吗?
3、GaussDB的“数据0丢失”是如何实现的?

原文内容

GaussDB作为一款企业级的数据库产品,和开源数据库OpenGauss之间又是什么样的关系,刚开始接触的时候是一头雾水,因此本文简要对比下二者的区别,以加深了解。

1、GaussDB和OpenGauss数据库简要对比

GaussDB是华为基于PostgreSQL数据库内核创新研发的企业级分布式关系型数据库,支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。最早GaussDB的定位是云数据库产品集合,包括关系型和非关系型数据库,产品矩阵如下:

可以看到GaussDB数据库包括:关系型的GaussDB(for openGauss)、GaussDB(for MySQL)和GaussDB(for PostgreSQL);非关系型的GaussDB(for Cassandra)、GaussDB(for Mongo)、GaussDB(for Redis)和GaussDB(for Influx)。不过从最新官网看到GaussDB数据库的划分,又聚焦于关系型数据库,从中可以看出从内部对GaussDB的产品定位上也有不同的理解。现在是定位更加清晰,云数据库GaussDB是应用于金融、电信和政企等关键核心系统的分布式数据库,尤其特指关系型的GaussDB(for openGauss)

1.1 OpenGauss和PostgreSQL关系

GaussDB的内核引擎最早是基于PostgreSQL 9.2版本不断演进,根据PG-XC架构衍生了多CN架构,并开发了分布式执行框架和向量化引擎等重要特性。

OpenGauss作为GaussDB数据库的开源主备版本,和PostgreSQL相比,在底层架构和数据存储方面类似,但OpenGauss在性能和扩展性方面进行了优化。主要在以下方面:
  • 执行模型:OpenGauss优化了线程池模型,满足高并发的访问需求

  • NUMA改造:OpenGauss支持信创服务器的Numa适配,提升服务器的性能

  • 存储引擎优化:OpenGauss支持列存和内存引擎,满足HTAP类业务场景需求

  • 优化器优化:结合实际的应用场景支持CBO对复杂查询场景的优化能力

对比PostgreSQL可以看到,OpenGauss对数据库引擎的性能和架构做了适配性改造,更符合国产化的需求,以满足信创环境下大规模和复杂的数据处理请求。

1.2 GaussDB和OpenGauss不同之处

GaussDB数据库作为企业级的分布式数据库,支持分布式和主备的部署场景,其中分布式版本包含CN(计算节点)、DN(数据存储节点)和GTM(分布式事务管理器)等节点类型。GaussDB数据库的分布式版本是基于share-nothing架构实现的,通过GTM-Lite技术实现事务强一致,消除了无中心节点性能的瓶颈。而OpenGauss简单来说就是GaussDB(for OpenGauss)的一个开源版本,支持主备部署形态

1.2.1 组件类型

GaussDB数据库作为分布式架构数据库,在数据库组件上相比OpenGauss数据库多了协调节点(Coordinator Node)和全局事务管理器(Global Transaction Manager),如下图所示。

  • OM(Operation Manager):运维管理模块提供数据库日常运维、配置管理的管理接口、工具等

  • CM(Cluster Manager):数据库管理模块管理和监控数据库系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。CM提供数据库主备的状态监控、网络通信故障监控、文件系统故障监控、故障自动主备切换等能力。

  • GTM(Global Transaction Manager):全局事务管理器负责生成和维护全局事务ID、事务快照、时间戳和sequence等全局唯一的信息。

  • CN(Coordinator Node):协调节点负责接收来自应用的访问请求,并向客户端返回执行结果;负责对SQL请求解析,并将请求路由到不同的DN分片上执行。

  • DN(Data Node):数据节点负责存储业务数据、执行数据查询任务以及向CN或客户端返回执行结果

  • ETCD:分布式键值存储系统,用于共享配置和服务发现

  • CMS(cm_server):进行数据库实例管理和实例仲裁的组件。主要功能包括:1)接收各个节点上cm_agent发送的数据库各实例状态;2)提供数据库实例整体状态的查询功能;3)监控实例的状态变化并进行仲裁命令的下发

  • Storage:服务器的本地存储,用于数据持久化,支持集中式存储

对比GaussDB和OpenGauss,OpenGauss由于是主备部署形态,不需要分布式架构下的CN和GTM节点,因此在数据库组件上有以下不同:

图片

1.2.2 部署架构

GaussDB和OpenGauss数据库部署架构如图所示,GaussDB在数据库部署组件中多了CN协调节点和GTM全局事务节点。另外,GaussDB数据库在分布式SQL执行的时候,通过CN节点将SQL请求下发到不同的DN节点执行,然后汇总结果到CN节点再返回给客户端,而在OpenGauss中客户端直接从DN层获取数据并返回。

1.2.3 GaussDB和OpenGauss差异对比
前文对比了GaussDB和OpenGauss数据库在组件和架构上的不同,下面总结下二者之间的差异:
  1. 开发背景和社区支持:OpenGauss是由华为公司发起的一个开源项目,具有活跃的社区支持和贡献者。GaussDB则是华为公司在OpenGauss的基础上进行商业化扩展和增强后的产品,提供企业级的支持和服务。

  2. 功能特性:OpenGauss作为开源产品,其功能相对基础,适合大多数通用场景,并且可以根据需求进行定制和扩展。GaussDB在OpenGauss的基础上增加了更多的高级特性和优化,包括但不限于性能优化、安全性增强、可靠性提升等,以满足企业级应用的更高要求。

  3. 技术支持和维护:OpenGauss作为一个开源项目,通常依赖于社区的支持和贡献来解决技术问题和提供更新。GaussDB作为商业产品,由华为公司提供专业的技术支持和维护服务,包括技术支持热线、定期更新和补丁等。

  4. 适用场景:OpenGauss适用于对成本敏感、需要灵活性和可控性的场景,如中小型企业、教育机构或个人开发者。GaussDB更适合对数据安全、性能稳定性和服务质量有较高要求的企业级应用场景,特别是大型企业和关键业务系统。

  5. 部署架构:OpenGauss支持主备部署架构,满足高可用要求;GaussDB支持主备和分布式部署形态,高可用架构上支持多中心部署,满足金融级别的高可用要求。

  6. 扩展能力:OpenGauss集中式部署受限于单台服务器的处理能力,无法横向扩容;GaussDB支持分布式部署架构,具备横向扩展能力,满足高并发高性能的场景。

  7. 信创生态兼容:OpenGauss和GaussDB支持全栈信创能力,和国产CPU、国产操作系统和中间件有很好的生态兼容。

1.3 总结

本文简要对比了GaussDB和OpenGauss数据库,二者作为优秀的国产数据库虽然在发展路线和应用场景上会有所不同,但在国产化基础软件信创改造的过程中都发挥了重要的作用。GaussDB作为企业级的分布式数据库,在金融、电信等关键行业应用广泛,而OpenGauss作为开源版本,更像MySQL或PostgreSQL数据库一样的开源生态,吸引更多的国产数据库爱好者参与共建、开发和优化。

参考资料:

  1. https://support.huaweicloud.com/gaussdb/index.html

  2. https://docs.opengauss.org/zh/docs/latest/docs

  3. https://blog.csdn.net/HCIS_HENGCHI/article/details/133774888

简单来说,就是多点备份,保证数据有多个副本,即使一个地方的数据丢失了,其他地方还有备份,可以快速恢复。就像把鸡蛋放在不同的篮子里,不怕一锅端。

兼容性很好,迁移成本不高,很多情况下就是改个连接串的事儿。但也别掉以轻心,还是要做好测试,特别是涉及到一些高级特性或自定义函数的时候,可能会有一些坑要踩。

技术上更准确的说法应该是RPO(Recovery Point Objective)=0,也就是数据恢复点目标为零,意味着在发生故障时,可以恢复到故障发生前的最后一个事务,从而保证数据不丢失。当然,这需要一定的技术成本和运维保障。

OpenGauss的SQL语法与PostgreSQL高度兼容,很多PostgreSQL的工具和应用可以直接在OpenGauss上使用,迁移成本相对较低。当然,也有一些差异需要注意,例如某些PostgreSQL的扩展插件可能需要进行适配才能在OpenGauss上运行。具体迁移成本取决于应用的复杂度和对PostgreSQL特性的依赖程度。

“数据0丢失”是GaussDB的一项重要特性,它通过多种机制来保证数据的高可用性和可靠性,例如:三副本强同步复制、同城跨AZ部署、基于Paxos协议的分布式一致性等等。这些机制可以有效防止硬件故障、网络中断等意外情况导致的数据丢失。

可以参考官方文档和社区的迁移案例,里面有详细的说明和工具,可以帮助你评估迁移成本和风险。建议先进行小规模的试点迁移,验证兼容性和性能,再逐步扩大迁移范围。

从技术角度来看,OpenGauss适合于单机或者简单的HA部署,可以满足一般的OLTP和OLAP需求。但如果涉及到分布式事务、跨地域部署、PB级数据量等复杂场景,就需要GaussDB的分布式架构和更强大的功能来支撑了。

对于业务规模不大的情况,OpenGauss通常是足够用的,特别是如果你对成本比较敏感,或者需要更高的自主可控性。OpenGauss的开源特性也方便进行定制化开发和扩展。但是,如果你的业务对数据一致性、高可用性、安全性或性能有极高的要求,或者预计未来业务会快速增长,那么就需要考虑GaussDB了。GaussDB提供更全面的企业级特性和专业的技术支持,能够更好地应对关键业务的需求。

这个问题就像问是买辆经济型小轿车还是豪华SUV。如果只是日常通勤代步,小轿车足够了,省油又经济。但如果要越野、要载多人,或者对舒适性和安全性有更高要求,那肯定得选SUV。OpenGauss就像小轿车,轻便灵活,适合中小业务;GaussDB就像SUV,功能强大,适合对性能和可靠性要求高的场景。