通过几个基本概念说一下为什么openGauss是当下之选?

Database、Schema、User都是数据库的基本概念,SQL标准中也有明确规范。但不同数据库的具体实现也不尽相同,有些甚至大相径庭。这就导致用户在做国产化选型和数据库迁移时可能会遇到种种困难。本文从这几个基本概念展开,说说为什么openGauss系数据库是国产数据库替换的当下之选。

同事的问题

今天有个同事问了我一个问题:
在这里插入图片描述

这位同事之前是搞MySQL的,对Oracle不甚了解。我们先来看看这两个图:

在这里插入图片描述

图1就是Oracle DBA经常用到的静态数据字典视图dictionary,可以查询数据库中所有的表和视图及其注释。我本人也经常模糊查询dictionary视图找到完整的表名。

在这里插入图片描述

图2的内容就有点陌生了。经验丰富的Oracle DBA应该很容易做出判断。图2会话应该并非使用sys登录的,恰好这个用户下有个同名的对象dictionary。

问题本身并不复杂,但却体现了不同数据库对这些基本概念实现上的差异。我借此机会整理一下Oracle、MySQL、openGauss这几个主流数据库在Database、schema、user这几个概念上的差异,也分享一下这些差异在国产数据库替换方面的影响。

概念说明

Database,是一个有组织的数据单元。这个概念所有数据库都是一致的。三家并无太大的不同。

Schema,是一个命名的数据库对象的集合,是一个逻辑范畴。如果把数据库比喻成一个大楼,那schema可以认为是每个房间。每个房间都可以配置自己的物品。也就是每个schema都可以有自己的表、视图、索引这些对象。

User,数据库中的用户,也就是数据的使用者。就如同进入大楼的人,可以进入自己的房间,也可以进入被授权的其它房间。

数据库中的所有对象(表、视图等)都是在这三个概念下组织起来的。具体组织方式则各不相同。

openGauss

openGauss源于PostgreSQL,而PostgreSQL又被称为学院派数据库,一板一眼的按规范完全实现了这些概念:

在这里插入图片描述

上图可知openGauss中用户独立于数据库之外,不属于数据库的一部分。数据库管理员登录到数据库创建用户时,openGauss自动在数据库中创建一个与用户名同名的schema。

vastbase=# create user appuser with password 'Password#0000' login;
CREATE ROLE
vastbase=# \dnList of schemasName           |  Owner   
-------------------------+----------appuser                 | appuser...

登录的用户可以通过set search_path命令切换有权限的其它schema,并创建对象:

vastbase=# set search_path=appuser;
SET
vastbase=# show current_schema;current_schema 
----------------appuser
(1 row)
vastbase=# create table zqhtest_1125(id number,name varchar2(20));
CREATE TABLE

当需要更多schema时,可以通过create schema命令创建:

vastbase=# create schema appuser2;
CREATE SCHEMA
vastbase=# 
vastbase=# set search_path=appuser2;
SET
vastbase=# create table zqhtest_1125(id number,name varchar2(20));
CREATE TABLE

可以看到不同schema下面可以创建同名的对象,所以说schema又叫namespace。是一个命名空间,不同schema下可以创建同名对象。

值得一提的是openGauss创建schema的语法也与SQL规范完全兼容,下面的截图来自Vastbase官方文档:

CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ];

Oracle

Oracle的实例在其生命周期内只能打开一个数据库,无法在一个实例下创建多个数据库,自然user也就没法独立于数据库之外。所以Oracle将user设计成了数据库的一部分,同时允许在一个数据库内创建多个user。

图片

当用户被创建时Oracle会自动为其创建同名的schema,这一点是与openGauss一致的。

Oracle也可以在用户不变的情况下切换schema,但几乎没有人这么用:

图片

可以看到用户名还是sys,但schema已经变了。之所以没有人切换schema,是因为Oracle不能脱离用户单独创建传统意义上的schema,也就是说用户名和schema必须是一一对应的。

读者可能注意到了,我上面说的是Oracle不能创建“传统意义“上的schema。这是因为Oracle为schema引入了新的内涵。查阅官方文档可知Oracle同样支持create schema语法:

在这里插入图片描述

Oracle的解释是这样的:

Use theCREATE SCHEMA statement to create multiple tables and views and perform multiple grants in your own schema in a single transaction.

To execute aCREATE SCHEMA statement, Oracle Database executes each included statement. If all statements execute successfully, then the database commits the transaction. If any statement results in an error, then the database rolls back all the statements.

没错!这根本与我们说的schema不是一个概念。Oracle相比其它数据库一直有个不足:DDL是隐式提交的,不支持回滚。所以Oracle使用这个create schema语句解决了DDL回滚的问题,将DDL放到schema中就实现回滚。

这样既实现了SQL规范,又实现了DDL回滚的功能。

MySQL

MySQL的user也是独立于数据库之外的:

在这里插入图片描述

但在Schema方面MySQL跟Oracle走了两个相反的方向,它把schema和database合起来了。

下图来自MySQL官方文档:

在这里插入图片描述

而且文档也做了说明:

CREATE DATABASE creates a database with the given name. To use this statement, you need the CREATE privilege for the database. CREATE SCHEMA is a synonym for CREATE DATABASE.

Create schema就是Create Database的同义词,在MySQL中是完全相同的。所以在MySQL中无法创建与数据库名相同的schema:

在这里插入图片描述

2021年有个客户做国产化替代工作,将MySQL中的数据库一对一的迁移到了openGauss,结果应用中的跨数据库的两表关联查询无法支持了。找我们协助我才知道MySQL竟然支持跨数据库关联查询。这在Oracle DBA和openGauss DBA眼里是多么离谱的功能!

我查阅了MySQL的官方文档看了上面的语法解释才豁然明白,其实本质上也就是两个schema关联查询。

MySQL这样设计的弊端就是同一个数据库下无法创建同名对象了,比如:

图片

这是显而易见的,因为只有一个schema。用户只能为每个业务创建单独的database,所以MySQL DBA管理的数据库数量都特别多。

总结

相对于这些大众普遍熟知的概念和SQL规范,MySQL和Oracle都有所偏离。

Oracle将user和schema合并了。而create schema命令的行为与创建传统意义的schema完全是风马牛不相及。因为不能脱离user单独创建schema,所以Oracle里要创建更多的user。

MySQL将Database和schema合并了,create schema其实就是create database的同义词。这在一定程度上降低了使用难度,但与其它数据库兼容性变差。跨数据库关联查询和同一个数据库中不能有同名对象这些行为在Oracle和openGauss/PostgreSQL的用户看来是如此的离谱。

openGauss源于PostgreSQL,也继承了PostgreSQL学院派风格,完整的实现了SQL规范。所以也就有更多灵活性和兼容性。替代Oracle时因为user和schema都是对应的,所以不需要做更多的转换。替换MySQL时可以将每个database迁移到openGauss的schema中。

可以这样说:openGauss是当下国产化数据库替代的最佳选择。

本文作者:传奇队长
转自:高斯茶话会

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

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

相关文章

CHARLS CLHLS CFPS公共数据库, 最新文章|周报(12.6)

欢迎参加郑老师2023年孟德尔随机化课程即将开始 发表文章后退款!郑老师科研统计课程详情 CHARLS公共数据库 CHARLS数据库简介中国健康与养老追踪调查(China Health and Retirement LongitudinalStudy,CHARLS)是一项持续的纵向调查,旨在调查中…

Stable Diffusion Windows 部署简单认知

写在前面 偶然看到,简单了解博文为 SD 部署,以及简单使用,部署过程遇到问题解决理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。…

pnpm :无法加载文件 D:\nodejs\node_global\pnpm.ps1,因为在此系统上禁止运行脚本

目录 一、问题描述 二、原因分析 三、解决问题 一、问题描述 pnpm : 无法加载文件 D:\learningsoftware\nodejs\node_global\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID1351 70 中的 a…

大象机器人发布万元级水星Mercury人形机器人产品系列,联结未来,一触即达!

十四五机器人产业发展规划指出机器人的研发、制造、应用是衡量一个国家科技创新和高端制造业水平的重要标志。当前,机器人产业蓬勃发展,正极大改变着人类生产和生活方式,为经济社会发展注入强劲动能。 人形机器人作为机器人产业中重要的一环&…

Java异常类分类,所有子类的父类是什么

1.异常的层次机构: 所有异常的父类是Throwable,它有两个子类,分别是Error和Exception。 2.Error: 表示系统错误,通常不能处理和恢复。比如StackOverFlowError或者OutOfMemoryError,出了问题只能结束程序…

Grafana安装zabbix插件

文章目录 一、在线安装zabbix插件二、离线安装1.下载安装2.grafana配置zabbix数据源 一、在线安装zabbix插件 如果grafana服务器可以联网即可在线安装。 安装方法官网上有:官网链接联网安装比较慢。 二、离线安装 1.下载安装 官网下载链接 [rootnode1 src]# mo…

猫罐头哪个品牌好?五款性价比高的猫罐头推荐

很多新手养猫的姐妹们都会为选罐头感到焦虑!但是每种罐头都有优缺点,每只猫咪的胃口也都不同,只有适合自家猫的才是最好的。所以姐妹们在选罐头之前可以先做好功课,了解一下怎么选好的罐头。 作为家里有3只猫的铲屎官来说&#xf…

Text Intelligence - TextIn.com AI时代下的智能文档识别、处理、转换

本指南将介绍Text Intelligence,AI时代下的智能文档技术平台 Textin.com 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认…

Ubuntu 常用命令之 clear 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 clear命令在Ubuntu系统下用于清除终端屏幕的内容。这个命令没有任何参数,它的主要作用就是清理终端屏幕上的所有信息,使得屏幕看起来像是新打开的一样。 使用clear命令非常简单,只需要在终端中…

JavaScript读写15693 ICod2 卡源码

本示例使用设备 &#xff1a; https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.23eb789efg450Y&id615391857885 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t…

camera 客观校准 (1)——抓图

#灵感# 客观校准很多平台都有&#xff0c;无非是抓raw&#xff0c;导入到calibration tool 中&#xff0c;设置一些参数&#xff0c;导出相应的校准数据。抓raw的方法&#xff0c;也是大差不差。但有些地方细节容易忽略&#xff0c;所以罗列一下。 目录 blc: lsc: color: …

ELFK日志收集

文章目录 第一章:ELK日志收集系统介绍日志收集重要性ELK介绍EFK介绍ELFK介绍ES部署Kibana部署第二章:Logstach日志收集Logstash介绍Logstash安装Logstash Input输入插件Logstash Filter过滤插件Logstash Output输出插件Input fileFilter mutatesplit示例add_field示例remove_…

ATFX期市:安哥拉宣布退出OPEC,减产计划还能否彻底执行?

ATFX期市&#xff1a;昨日&#xff0c;安哥拉矿产资源、石油和天然气部长迪亚曼蒂诺阿泽维多在首都罗安达宣布&#xff0c;安哥拉决定退出OPEC&#xff0c;原因是此前OPEC第36次会议将安哥拉的产量配额设定为111万桶&#xff0c;不及安哥拉方面提出的118万桶。安哥拉的退出预计…

操作系统期末知识点总结

第一章 1、操作系统&#xff1a;OS是一个大型的系统软件、它负责计算机的全部软件和硬件资源的管理&#xff0c;并为用户提供良好的应用界面&#xff0c;使整个计算机系统实现高效率和高度自动化 2、操作系统的形成 1&#xff09;手工操作阶段 2&#xff09;批处理系统&…

Pooling方法总结(语音识别)

Pooling layer将变长的frame-level features转换为一个定长的向量。 1. Statistics Pooling 链接&#xff1a;http://danielpovey.com/files/2017_interspeech_embeddings.pdf The default pooling method for x-vector is statistics pooling. The statistics pooling laye…

爬虫工具Curl!

爬虫工具Curl&#xff01; 链接: Curl 使用它可以将网站内的信息转成python可用格式 打开开发工具中的网络选项卡右键单击&#xff08;或按住 Ctrl 键单击&#xff09;请求单击“复制”→ “复制为 cURL”粘贴到上面的curl命令框中 !!!警告&#xff1a;复制的命令可能包含 co…

redis基本用法学习(C#调用NRedisStack操作redis)

redis官网文档中推荐C#中使用NRedisStack包连接并操作redis&#xff0c;本文学习C#调用NRedisStack操作redis的基本方式。   新建Winform项目&#xff0c;在Nuget包管理器中搜索并安装NRedisStack包&#xff0c;如下图所示&#xff1a; 主要调用StackExchange.Redis命名空间下…

从及格走向优秀的纷享销客,成为了SaaS“全村的希望”

前不久&#xff0c;国漫《长安三万里》爆火&#xff0c;让很多观众看到破防 。尤其是影片结尾李白的那一句“轻舟已过万重山”&#xff0c;更是戳中无数成年人泪点。 与很多创业公司一样&#xff0c;在过去十几年&#xff0c;纷享销客始终在中国SaaS产业摸爬滚打。同质化之争、…

如何实现设备远程控制?

在工业自动化领域&#xff0c;设备远程控制是一项非常重要的技术。它使得设备可以在远离现场的情况下进行远程操作和维护&#xff0c;大大提高了设备的可用性和效率。 设备远程控制的应用场景有哪些&#xff1f; 远程故障排除&#xff1a;当设备出现故障时&#xff0c;工程师…