数据库系列之简要对比下GaussDB和OpenGauss数据库
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数据库在组件和架构上的不同,下面总结下二者之间的差异:
- 开发背景和社区支持:OpenGauss是由华为公司发起的一个开源项目,具有活跃的社区支持和贡献者。GaussDB则是华为公司在OpenGauss的基础上进行商业化扩展和增强后的产品,提供企业级的支持和服务。
- 功能特性:OpenGauss作为开源产品,其功能相对基础,适合大多数通用场景,并且可以根据需求进行定制和扩展。GaussDB在OpenGauss的基础上增加了更多的高级特性和优化,包括但不限于性能优化、安全性增强、可靠性提升等,以满足企业级应用的更高要求。
- 技术支持和维护:OpenGauss作为一个开源项目,通常依赖于社区的支持和贡献来解决技术问题和提供更新。GaussDB作为商业产品,由华为公司提供专业的技术支持和维护服务,包括技术支持热线、定期更新和补丁等。
- 适用场景:OpenGauss适用于对成本敏感、需要灵活性和可控性的场景,如中小型企业、教育机构或个人开发者。GaussDB更适合对数据安全、性能稳定性和服务质量有较高要求的企业级应用场景,特别是大型企业和关键业务系统。
- 部署架构:OpenGauss支持主备部署架构,满足高可用要求;GaussDB支持主备和分布式部署形态,高可用架构上支持多中心部署,满足金融级别的高可用要求。
- 扩展能力:OpenGauss集中式部署受限于单台服务器的处理能力,无法横向扩容;GaussDB支持分布式部署架构,具备横向扩展能力,满足高并发高性能的场景。
- 信创生态支持:OpenGauss和GaussDB支持全栈信创能力,和国产CPU、国产操作系统和中间件有很好的生态兼容。
1.3 总结
本文简要对比了GaussDB和OpenGauss数据库,二者作为优秀的国产数据库虽然在发展路线和应用场景上会有所不同,但在国产化基础软件信创改造的过程中都发挥了重要的作用。GaussDB作为企业级的分布式数据库,在金融、电信等关键行业应用广泛,而OpenGauss作为开源版本,更像MySQL或PostgreSQL数据库一样的开源生态,吸引更多的国产数据库爱好者参与共建、开发和优化。
参考资料:
- https://support.huaweicloud.com/gaussdb/index.html
- https://docs.opengauss.org/zh/docs/latest/docs
- https://blog.csdn.net/HCIS_HENGCHI/article/details/133774888
相关文章:

数据库系列之简要对比下GaussDB和OpenGauss数据库
GaussDB作为一款企业级的数据库产品,和开源数据库OpenGauss之间又是什么样的关系,刚开始接触的时候是一头雾水,因此本文简要对比下二者的区别,以加深了解。 1、GaussDB和OpenGauss数据库简要对比 GaussDB是华为基于PostgreSQL数据…...
FFmpeg的AVInputFormat
文章目录 结构体定义操作函数支持的AVOutputFormat 通过上面的分析,基本可以看到ffmpeg的套路了,首先一个context上下文,上下文里面一个priv_data 指针,然后再插件结构体中有一个priv_data_size,然后回调函数。 结构体…...

SQL命令---删除字段
介绍 使用sql语句删除表字段。 命令 alter table 表名 drop 字段名;例子 删除a表中的name字段。 alter table a drop name;下面是执行删除后的表结构:...
深入探讨 Python 中的装饰器和上下文管理器
Python 作为一门灵活而强大的语言,提供了许多高级特性,其中装饰器(Decorators)和上下文管理器(Context Managers)是其中两个非常有用的概念。这两个功能性特性提供了对代码结构和行为进行修改和控制的强大工…...
比whatsapp效果好---Google Messages RCS协议消息推送
这段时间由于使用谷歌手机Pixel 7 ( Android13)研究改机room,看了很多相关的资料,测试研究了谷歌生态很多软件功能。结果就是改机Room还没编译成功,反而是测试出Google Messages群发功能的bug,算是一个惊喜…...

HBuilder X
选择一款编程软件有以下几个好处: (1)提高效率:编程软件通常强调代码编辑和自动完成,可以帮助程序员更快速、更准确地输入代码。 (2)降低错误率:编程软件还可以检测代码中的错误&a…...

异地现场工控设备,如何实现远程配置、调试?
南京某企业专注于工业物联领域,在相关项目中往往会在各个点位部署基于Linux系统的中控主机,实现各类物联设备信息的采集、汇总。但是,由于各点位分散多地,且数量达到了上百个,虽然中控主机具备4G物联网接入能力&#x…...

C++报错:error C2238: 意外的标记位于“;”之前
报错信息如下: 编译遇见这样的错误信息主要有一下几种: 情况一: 多数情况下出现这种问题的原因是因为头文件重复包含:即头文件A包含了B,头文件B又包含了A,导致编译器在加载头文件时陷入死循环。 解决办法…...

五、Microsoft群集服务(MSCS)环境的搭建
一、【目的】 学会利用Windows Server布置群集环境。 二、【设备】 FreeNAS11.2,Windows Server 2019 三、【要求】 学会利用Windows Server布置群集环境,掌握处理问题的能力。 配置表: 节点公网IP(public)内网IP(private)群集IP(clust…...

通义千问 Qwen-72B-Chat在PAI-DSW的微调推理实践
01 引言 通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上,使用对齐机制打造的…...

web应用体系以及windows网络常见操作应用
本课程目标 1.Dos命令(必须掌握) 2.网络体系(笔试选择填空题) 3.搭建windows测试环境 一、Dos命令 1.DOS窗口启动 启动方式1.进入DOS页面:win+R,键入cmd 启动方式2.开始-运行--输入cmd-回车,此时将出现一个显示命令提示符的窗口,如下图 2、常见的Dos命令: 1、cd…...
FFmpeg 安装配置
FFmpeg 安装配置 依赖包 sudo apt-get install -y autoconf automake bzip2 cmake freetype-devel gcc gcc-c git libtool make mercurial pkgconfig zlib-devel x264-develsudo apt-get install yasm -y安装 wget https://ffmpeg.org/releases/ffmpeg-4.2.3.tar.bz2tar -…...

14:00面试,14:08就出来了,问的问题有点变态。。。。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...

vue3 添加编辑页使用 cron 表达式生成
示例效果图 1、添加组件 <template><div class"v3c"><ul class"v3c-tab"><li class"v3c-tab-item" :class"{ v3c-active: tabActive 1 }" click"onHandleTab(1)">秒</li><li class&qu…...

洛谷P1722 矩阵Ⅱ——卡特兰数
传送门: P1722 矩阵 II - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1722 用不需要除任何数的公式来求。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cmath> #includ…...

Unity | Shader基础知识(第六集:语法<如何加入外部颜色资源>)
目录 一、本节介绍 1 上集回顾 2 本节介绍 二、语法结构 1 复习 2 理论知识 3 Shader里声明的写法 4 Properties和SubShader毕竟不是一家人 三、 片元着色器中使用资源 四、代码实现 五、全部代码 六、下集介绍 相关阅读 Unity - Manual: Writing Surface Shaders…...

使用opencv的Laplacian算子实现图像边缘检测
1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题,也是经典的技术难题之一。如何快速、精确地提取图像边缘信息,一直是国内外的研究热点,同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…...

5. PyTorch——数据处理模块
1.数据加载 在PyTorch中,数据加载可通过自定义的数据集对象。数据集对象被抽象为Dataset类,实现自定义的数据集需要继承Dataset,并实现两个Python魔法方法: __getitem__:返回一条数据,或一个样本。obj[in…...

Android 移动端编译 cityhash动态库
最近做项目, 硬件端 需要 用 cityhash 编译一个 动态库 提供给移动端使用,l 记录一下 编译过程 city .cpp // // Created by Administrator on 2023/12/12. // // Copyright (c) 2011 Google, Inc. // // Permission is hereby granted, free of charg…...

IO流学习
IO流:存储和读取数据的解决方案 import java.io.FileOutputStream; import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象//写出 输入流 OutputStream//本地文件fileFileOutputStream fos new FileOutputS…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...