简单了解GaussDB

大家都已经很熟悉openGauss了,昨天我的文章中说陕西电力的用采系统用Gaussdb替代了Oracle,就有朋友问我这个Gaussdb是不是就是openGauss。这个问题还真的有点不好回答,Gaussdb和openGauss渊源很近,但是还不是一码事。华为在数据库产品这方面还是挺复杂的。这个Gaussdb实际上指的是Gaussdb企业版,在早期的华为云上,叫做Gaussdb for openGauss。这个企业版的Gaussdb分为分布式和主备两种形态,陕西用采用的是其中的分布式版本。而openGauss是Gaussdb产品的开源版本,是基于Gaussdb代码基础上分离出来的一个独立的数据库产品,也就是其主备版本,其中的分布式特性是完全剥离的。

这是一个Gaussdb的分布式形态的架构图。从这张图上,我们可以看出Gaussdb分为CN/DN/GTM三种节点。CN是计算节点,DN是存储节点,GTM是分布式事务管理器。实际上还有一些其他的组件,比如集群管理CM,管理配置信息的ETCD等,这里就不一一罗列了。

CN是Coordinator Node的简称,负责数据库系统元数据存储、查询任务的分解和部分执行,以及将DN中查询结果汇聚在一起。DN是数据存储节点,负责存储本地数据,并且负责分布式执行计划的本地算子执行。

可能有些朋友看到上面的架构会想起POSTGRES-XC这个开源项目,确实是的,早期的GAUSSDB是基于POSTGRES-XC开源项目的,因此虽然经过多年迭代,还是保留了一定的PGXC的痕迹。有兴趣的朋友可以去做个对比,实际上目前的Gaussdb与PGXC已经是完全不同的数据库了。

从这张图上,我们可以看出Gaussdb执行SQL的逻辑。客户端通过CN的监听端口连接到数据库上,在CN上发起一个SQL查询。CN进行SQL解析,生成分布式执行计划,并将查询计划下推到多个DN,DN启动执行线程完成查询,将结果返回CN,CN汇总执行结果,对客户端返回结果。

针对网上对Gaussdb的质疑,认为Gaussdb仅仅是PG套壳,实际上也是不够严肃的。实际上在Gaussdb的官方文档中也没有遮遮掩掩,直接表明了Gaussdb与PG以及PG-XC的关系。Gaussdb与PG的主要区别在于进程模型与线程池模型的差异,以及Gaussdb在PG的ASTORE基础上自研了内存引擎,列存和USTORE。目前在openGauss中USTORE还是处于BETA版本,而在商用的Guassdb上,USTORE已经正式商用了。

另外在GTM上,Gaussdb改写了PGXC的GTM,打破了PGXC在高并发环境下的GTM性能瓶颈。开源的PGXC因为GTM过重,并且GTM无法横向扩展而导致高并发的负载下,GTM会成为一个十分明显的瓶颈点。

作为信创替代工作的潜在数据库产品,大家可能很关心Gaussdb的Oracle兼容性问题,从openGauss上我们看到的和Oracle兼容的特性并不很多,因此很多朋友可能很关心Gaussdb是不是也像openGauss一样。如果简单分析一下Gaussdb,我们还是可以看出研发团队还是在兼容性上做了一定的工作的。首先PL/SQL存储过程的兼容性还是不错的,大多数Oracle的存储过程是可以简单的迁移过去的,当然PL/SQL上不大可能100%兼容,大多数国产数据库,哪怕是和Oracle兼容性做得很好的达梦数据库都只能做到90+%的存储过程语法兼容,不过这些兼容对于大多数应用迁移来说就完全够用了,Oracle PL/SQL的一些特殊语法,可能大多数开发人员都没听说过。

在语法上,Gaussdb支持(+)外连接,“||”拼接字符串等Oracle数据库的操作,还是做了一定的友好性兼容的,NVL,DECODE等函数也实现了和Oracle语法的兼容,也设计了rowid位列。不过Gaussdb并没有引入Oracle的dual表,因此虽然sequence的语法做了与Oracle兼容,不过只能使用select seq.nextvel 语法来替代select seq.nextvel from dual;。遇到这种Oracle数据库使用的比较频繁的语句还是要修改应用的。另外rownum位列的缺失也会让分页查询的语法与Oracle的一些传统写法不同。另外在时间函数上,Gaussdb引入了sysdate,并且支持对sysdate进行类似Oracle的加减法操作。不过我并没有找到systimestamp,如果要使用timestamp就只能使用pg_systimestamp了。

在统计和窗口函数上,Gaussdb提供的内容要比Oracle还丰富一些,这对于分布式数据库来说是十分重要的。这方面实际上是分布式数据库的一个短板,能够提供丰富的统计与窗口函数,说明Gaussdb在复杂SQL语法兼容方面做得还可以。不过因为条件有限,我目前还没有做真实的测试,性能是不是够好,还不敢说。

可以看出Gaussdb商用版在Oracle语法兼容上做了一定的工作,如果要从Oracle迁移应用过来,比起openGauss来会简化不少,不过比起这方面做得最好的国产数据库达梦数据库来看,还是有一定的差距的。

语法兼容性还是一些表面的问题,实际上如果把应用从集中式的Oracle数据库迁移到分布式的Gaussdb,还有很多性能方面的问题需要考虑。比如SEQUENECE,在集中式数据库中,哪怕是在rac上,SEQUENCE只要CACHE设置的合理,就不会有大的性能问题。而在分布式数据库Gaussdb中,Sequence的申请都会涉及GTM操作,因此成本是较高的。如果大批量的数据写入要使用Sequence,那么还是要采取一些特殊的做法的,否则性能是无法保证的。

另外一方面SQL的语法上Gaussdb虽然做了大量的优化,但是分布式数据库的CBO优化器工作机制与集中式数据库的差异也决定了在语法近似的SQL语句的执行上存在巨大的差异,因此我们在做应用迁移的时候还是需要充分考虑的。

目前Gaussdb形成了商用数据库、开源数据库(openGuass)、基于开源数据库的第三方商用数据库这种丰富的生态,又在大生态上兼容流行度排名靠前的PostgreSQL数据库。因此在生态建设方面具有得天独厚的优势,这十分有利于该生态的数据库产品的发展。目前神州通用、南大通用、海量、云和恩墨等数据库厂商都加入了openGauss生态,使用开源代码封装商用数据库产品。其中南大通用的Gbase 8C是基于openGauss内核的分布式数据库,其他三家以集中式主备模式的数据库为主。

希望今天我的这篇文章能对大家在openGauss生态的数据库选择中有所帮助。在企业做信创数据库替代的产品选择时,可能会考虑到成本的问题,对于比较在乎成本的用户,或者需要迁移的数据库数量很多的用户,商用版与开源版同时存在的生态可能比较适合。核心关键应用用商用的,普通的应用用开源的,其内核相同,学习与运维成本相对就会较低。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++八股文:c++面向对象

文章目录 1.c面向对象三大特性2.c的三个访问修饰符3.多重继承4.重载与重写5.c多态怎么实现6.成员函数/成员变量/静态成员函数/静态成员变量的区别7.构造函数和析构函数8.c构造函数有几种9.什么是虚函数什么是虚函数表10.虚函数和纯虚函数的区别11.抽象类和纯虚函数12.虚析构13.…

ABAP - SALV教程05 添加页眉和页脚

先看看效果叭CL_SALV_TABLE提供了SET_TOP_OF_LIST方法设置页眉显示和SET_TOP_OF_LIST_PRINT方法设置页眉打印来实现添加页眉的目的。CL_SALV_TABLE提供了SET_END_OF_LIST方法设置页脚显示和SET_END_OF_LIST_PRINT方法设置页脚打印来实现添加页脚的目的。这个四个方法的传入参数…

Flutter异常上报及性能监控实现

1. 页面异常监测 在Flutter中,通常用FlutterError监测Flutter框架抛出的异常,用runZonedGuarded监测应用中用户代码异常。 class AppGuarded {run(Widget app) {//1. 用FlutterError监测flutter框架抛出的异常FlutterError.onError (FlutterErrorDetail…

STM32F4 HAL库串口死锁问题调试记录

文章目录 STM32F4 HAL库串口死锁问题调试记录调试方法结果分析解决方法一:方法二: STM32F4 HAL库串口死锁问题调试记录 使用方法:通过串口DMA固定周期向外发送数据,同时开启串口DMA接收用于接收其它板卡发来的数据。 问题&#x…

2024年,智慧文旅领航新时代,重塑旅行体验的未来篇章!

随着科技的飞速发展,智慧文旅正成为旅游行业的新宠,以其独特的魅力和无限可能,引领着旅行体验的全面升级。 2024年,智慧文旅火爆出圈,成为各界关注的焦点,为游客带来了前所未有的震撼与享受。 智慧文旅&a…

290.【华为OD机试】连续出牌数量(深度优先搜索DFS—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…

《猛兽派对》好玩吗值得买吗?苹果电脑也能装《猛兽派对》吗?猛兽派对好友通行证 动物派对 猛兽对战游戏

目录 一、《猛兽派对》好玩吗? 游戏玩法: 物理引擎: 关卡设计: 游戏特色: 评价: 荣誉: 二、苹果电脑也能装《猛兽派对》吗? 第1步:下载并安装CrossOver这款软件…

C语言---文件操作(1)

1.文件的打开和关闭 fopen有2个参数,第一个是文件的名字,第二个是打开的模式(例如是读文件还是写文件) (1)该文件夹下面没有data.txt文件,但是我执行了read操作,所以会显示这样的错误 (2&#…

『NLP学习笔记』图解GPT3(How GPT3 Works-Visualizations and Animations)

图解GPT3(How GPT3 Works-Visualizations and Animations) 文章目录 一. GPT-1 vs GPT-2 vs GPT-3 vs GPT-3.5 vs GPT-4二. GPT32.1. 训练动图2.2. 预测动图2.3. 代码生成示例三. 参考文章原作者主页:Jay Alammar原英文链接:How GPT3 Works - Visualizations and Animations …

ApplicationContext容器

ApplicationContext容器 1.概述 ApplicationContext接口代表了一个Spring容器,它主要负责实例化、配置和组装bean。ApplicationContext接口间接继承了BeanFactory接口,相较于BeanFactory一些基本的容器功能,ApplicationContext接口是在BeanFactory接口基础上进行了扩展,增…

SQL 术语:Join 中的 Build 和 Probe 是什么意思?

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

如何在Vue中实现事件处理?

Vue是一种流行的JavaScript框架,广泛应用于前端开发。在Vue中,事件处理是一个非常关键的概念,可以帮助我们实现用户与页面的交互,今天我们就来探讨一下如何在Vue中实现事件处理。 首先,让我们先了解一下在Vue中如何绑…

[pdf]《软件方法》强化自测题业务建模需求分析共191页,230题

潘加宇《软件方法》强化自测题业务建模需求分析共191页,230题,已上传CSDN资源。 在完成书中自测题基础上,进一步强化。 也可到以下地址下载: 资料http://www.umlchina.com/url/quizad.html 如果需要网盘提取码:uml…

【Python】1. 背景知识

认识 Python 计算机基础概念 什么是计算机? 很多老一辈的人, 管下面这个叫做计算机. 然鹅, 它只是 “计算器”, 和计算机是有很大区别的. 现在我们所说的计算机, 不光能进行算术运算, 还能进行逻辑判断, 数据存储, 网络通信等等功能,。 以至于可以自动的完成非常复杂的工作…

代码随想录day10(2)字符串:反转字符串Ⅱ (leetcode541)

题目要求:给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前…

Spring与Spring Boot:简化Java开发的革命性框架

Spring与Spring Boot:简化Java开发的革命性框架 摘要:本文将深入探讨Spring与Spring Boot两个在Java开发领域具有重要地位的框架。我们将了解它们的核心概念、区别、联系以及在实际项目中的应用。通过本文,您将更好地理解如何使用这两个框架…

Zookeeper4:Java客户端、应用场景以及实现、第三方客户端curator工具包

文章目录 Java连接Zookeeper服务端依赖代码使用 应用场景统一命名服务统一配置管理统一集群管理服务器节点动态上下线理解实现模拟服务提供者【客户端代码】-注册服务模拟服务消费者【客户端代码】-获取服务信息进行请求消费 软负载均衡分布式锁理解实现 生产集群安装N台机器合…

Java中的Collection

Collection Collection 集合概述和使用 Collection集合概述 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素 JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现 创建Collection集合的对象 多态的方式 具体的实现类ArrayList C…

leetcode - 71. Simplify Path

Description Given a string path, which is an absolute path (starting with a slash ‘/’) to a file or directory in a Unix-style file system, convert it to the simplified canonical path. In a Unix-style file system, a period ‘.’ refers to the current di…

MATLAB环境下基于熵的声纳图像分割算法

声纳图像作为准确获取水下信息的重要途径之一,在国防、军事、工程等方面发挥着巨大作用。然而,由于水声信道的复杂多变和声波本身的传播损失,声纳图像往往呈现出分辨率和对比度不高、噪声干扰严重、目标轮廓模糊等特点。 声纳图像的分割指的…