通过几个基本概念说一下为什么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=# \dn
          List of schemas
          Name           |  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.mfbz.cn/a/263473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp实战 -- 个人信息维护(含选择图片 uni.chooseMedia,上传文件 uni.uploadFile,获取和更新表单数据)

效果预览 相关代码 页面–我的 src\pages\my\my.vue <!-- 个人资料 --><view class"profile" :style"{ paddingTop: safeAreaInsets!.top px }"><!-- 情况1&#xff1a;已登录 --><view class"overview" v-if"membe…

docker数据卷数据卷容器

前言 今天调休在家&#xff0c;随便玩玩&#xff0c;简单做下学习记录 1. 数据卷特点 数据卷在容器启动时初始化&#xff0c;如果容器使用的镜像在挂载点包含了数据&#xff0c;这些数据会被拷贝到新初始化的数据卷中数据卷可以在容器之间共享和重用可以对数据卷里的内容直接…

【Linux】编辑、查看和搜索文件

大多数 Linux 发行版不包含真正的 vi;而是自带一款高级替代版本&#xff0c;叫做 vim(它是“vi improved”的简写)由 Bram Moolenaar 开发的&#xff0c;vim 相对于传统的 Unix vi 来说&#xff0c;取得了实质性进步。 启动和退出 vim 使用vim可以启动&#xff0c;如命令行输…

电脑文件msvcp140.dll丢失该怎么解决?靠谱的msvcp140.dll修复方法

面对计算机系统报告的msvcp140.dll文件丢失警报&#xff0c;这个问题可能会阻碍依赖此特定动态链接库(DLL)的一些程序的正常启动和运行。解决msvcp140.dll文件丢失的问题对于保障相关应用程序能够无障碍操作非常关键&#xff0c;并且这还是确保计算机系统保持高效稳定运行的必要…

华为gre隧道全部跑静态路由

最终实现&#xff1a; 1、pc1能用nat上网ping能pc3 2、pc1能通过gre访问pc2 3、全部用静态路由做&#xff0c;没有用ospf&#xff0c;如果要用ospf&#xff0c;那么两边除了路由器上跑ospf&#xff0c;核心交换机也得用ospf r2配置&#xff1a; acl number 3000 rule 5 deny…

Java设计模式之单例模式以及如何防止通过反射破坏单例模式

单例模式 单例模式使用场景 ​ 什么是单例模式&#xff1f;保障一个类只能有一个对象&#xff08;实例&#xff09;的代码开发模式就叫单例模式 ​ 什么时候使用&#xff1f; 工具类&#xff01;&#xff08;一种做法&#xff0c;所有的方法都是static&#xff0c;还有一种单…

Notepad++如果同一个窗口,打开了很多文件,需另开一个窗口

如果一个窗口已经这么多了&#xff0c;需要另外再一个 这里打开

效果图云渲染是什么意思?如何渲染出照片级别的效果图?

​在当前的建筑规划、室内装修以及电影视效制作等行业内&#xff0c;制作高质量的效果图起着至关重要的作用&#xff0c;因为它能够给予观众或客户极为逼真和吸引人的视觉体验。在此篇文章中&#xff0c;我们将深入了解什么是云端效果图渲染&#xff0c;并探讨如何运用Renderbu…

C#中如何稳定精确地每隔5ms执行某个函数?

C#中如何稳定精确地每隔5ms执行某个函数&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C#的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xf…

技术丨 浅谈以太网系统级刷写测试

在研发阶段&#xff0c;我们一般将ECU直连至刷写上位机进行软件更新&#xff0c;但在整车环境中&#xff0c;各ECU之间通过线束连接在一起&#xff0c;如果此时想对某个单独的样件进行软件更新&#xff0c;把零件拆下来再接到上位机上进行软件更新是不现实的。 作为测试工程师…

QT编写应用的界面自适应分辨率的解决方案

博主在工作机上完成QT软件开发&#xff08;控件大小与字体大小比例正常&#xff09;&#xff0c;部署到客户机后&#xff0c;发现控件大小与字体大小比例失调&#xff0c;具体表现为控件装不下字体&#xff0c;即字体显示不全&#xff0c;推测是软件不能自适应分辨率导致的。 …

泰克TDS3054B示波器 2 或 4 条通道

产品特点 500 MHz 、300 MHz 、100 MHz 三种带宽 取样速率高达 5 GS/s TDS3054B 数字示波器带宽500MHZ TDS3054B TDS3054B 数字示波器带宽500MHZ TDS3054B 2 或 4 条通道 全 VGA 彩色 LCD 显示 25 种自动测量功能 9 位垂直分辨率 TDS3054B 数字示波器带宽500MHZ TDS3054B TDS…

【图神经网络 · 科研笔记5】异构信息网络,利用注意力选择元路径;利用进化邻域和社群实现自监督动态图嵌入,交叉监督对比学习;近期科研思维导图小汇总;

记录部分科研文献阅读相关内容【划重点】,主题“图神经网络”,仅学习使用。 🎯作者主页: 追光者♂🔥 🌸个人简介: 📝[1] CSDN 博客专家📝 🏆[2] 人工智能领域优质创作者🏆 🌟[3] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌿[4] 2022年度…

【深入探讨人工智能】网络研讨系列介绍

笔者于2023年7月27日受邀代表开源社参加 Linux 基金会和 Open Source Initiative&#xff08;OSI - 开源促进会&#xff09;在日内瓦联合举办的 Open Source Congress 2023&#xff08;全球开源峰会&#xff09;。 国内同时有开放原子开源基金会孙文龙理事长率团参加。短短一天…

15个热门的开源数据可视化项目

数据可视化(即 BI仪表盘)是图形表示的数据。它涉及产生将表示的数据之间的关系传达给图像查看者的图像。这种通信是通过在可视化过程中使用图形标记和数据值之间的系统映射来实现的。该映射建立了如何在视觉上表示数据值,确定图形标记的属性(例如大小或颜色)如何以及在多大程…

Zookeeper集群搭建,四字命令监控,Leader选举原理以及数据如何同步

Java学习面试指南&#xff1a;https://javaxiaobear.cn 1、集群角色 Leader&#xff1a; 领导者。 事务请求&#xff08;写操作&#xff09;的唯一调度者和处理者&#xff0c;保证集群事务处理的顺序性&#xff1b;集群内部各个服务器的调度者。对于create、setData、delete…

七星创客系统模式:轻松打造千万会员体系

在当今快速变化的商业环境中&#xff0c;企业需要一种全新的模式来应对挑战&#xff0c;而七星创客模式正是这样一种具有吸引力的解决方案。七星创客模式是一种创新的商业模式&#xff0c;它通过将传统销售模式与现代科技手段相结合&#xff0c;为企业带来更多的机遇和可能性。…

教你如何完美录制电脑端游戏视频

在如今的互联网时代&#xff0c;游戏视频已成为了一个非常受欢迎的内容形式。无论是玩家和内容创作者想要分享自己的游戏技巧&#xff0c;还是游戏制作公司想要宣传自己的新作品&#xff0c;录制游戏视频已经成为了一种流行的趋势。 那么&#xff0c;如何在电脑上录制游戏视频…

JS逆向基础

JS逆向基础 一、什么是JS逆向&#xff1f;二、接口抓包三、逆向分析 一、什么是JS逆向&#xff1f; 我们在网站进行账号登录的时候对网页源进行抓包就会发现我们输入的密码在后台会显示为一串由字母或数字等符号&#xff0c;这就是经过加密呈现的一段加密文字&#xff0c;而分…

搭建接口自动化测试框架python+requests+pytest

安装python&#xff08;最好是比较新比较稳定的版本&#xff09;&#xff0c;然后是python的解释器或者叫编译器pycharm安装后新建一个项目&#xff0c;以此项目为基础&#xff0c;安装依赖搭建框架。打开pycharm&#xff0c;点击左上角的File->New project->弹出如下界面…
最新文章