国产数据库VastBase适配指南

news/2024/9/19 15:14:01/文章来源:https://www.cnblogs.com/gaoyanbing/p/18420588

 

背景

  目前数据库市场上,仍然是甲骨文、IBM为代表的国外数据库软件处于主导地位,国产化的数据库的使用率,与推广面很有限。相对于主流数据库而言,国产数据库的优势并不明显,还有相当远的距离。那么我们为什么要用国产数据库呢?因为数据安全。相对于其它新特性而言,安全尤为重要。数据一旦泄露,对个人而言是侵犯隐私。对企业而言是商业秘密,会导致经济损失。对国家机关而言是机密,会带来国家安全上的危害。毕竟谁也不想,自己的系统正常的运行中,突然就尝到了大洋彼岸自由的子弹。所以在金融、军工、电信、能源、医疗、交通等关键行业领域,以及国企和政府国产数据库的使用概率很高,而当客户有相当部分的国企与政府单位时,适配国产数据库是势在必行的事情。
  今天要分享的国产数据库为Vastbase G100,分享从Mysql到Vastbase的数据切换经验,以及如何解决一些开发中的实际问题和注意事项等。
Vastbase介绍

  Vastbase G100(以下简称Vastbase)是海量数据基于openGauss内核研发的企业级关系型数据库。产品从架构到引擎等多维度均进行了大范围深度优化,兼具极致性能与高兼容、高可用、高安全、多引擎、高并发等多种特性,给用户提供更高级别的产品质量保障和运行支撑,是各行业用户数据库国产化的优选方案。更多信息:Vastbase官网与Vastbase 官方文档。
  那openGauss又是什么呢?openGauss是华为开源的高性能,高安全,高可靠的企业级关系型数据库。是基于PostgreSQL 9.2版本开发的,基本包括了PostgreSQL 9.4的新功能。同时,openGauss也是一个开源、免费的数据库平台。更多信息:openGauss与openGauss仓库。
  那PostgreSQL又是什么数据库呢?(最后一次套娃了)PostgreSQL 是一个免费的对象–关系数据库服务器(ORDBMS),号称 “世界上最先进的开源关系数据库” ,在灵活的BSD许可证下发行。正确的读法应该为: post-gres-Q-L,或简称为:postgres,当然也有读post-gre-S-Q-L的,emmm,看个人习惯吧,别当着老外读就行了。接下来我们看一下PostgreSQL的排名(截图于:2022.5.15),大家可以直接去 DB-Engines Ranking 查看最新的排名情况。
请添加图片描述
请添加图片描述
  从图中不难看出PostgreSQL受欢迎程度并不低,仅次于三巨头,甚至超过了我们常用的Redis、MongoDB与ES,其中Hbase竟跌出了前二十。从图二中我们可以看出,PostgreSQL在受欢迎的同时,趋势每年还在不停的上涨!要是各位的基金和股票也有这个势头就好了(doge)。更多信息:PostgreSQL 官网与PostgreSQL 仓库
  结论:Vastbase 基于 --> openGauss 基于 --> PostgreSQL 9.2。那么我们费了这么大的力气理顺这条关系有什么用呢?有用处的,Vastbase是商用数据库,没有开源的代码,并且国内使用的企业也有限,别人也未必会把使用经验公开,所以遇到问题时,能查的到资料其实十分有限。这时,我们找解决方案时,可以直接去openGauss或PostgreSQL的社区查找!这些都是血泪史啊。其次我们也不难看出,虽然我们使用的是国产数据库,但是对开发者成长也是有一定帮助的,主要在于本数据库主要是基于PostgreSQL内核二次开发的,我们可以学习一下 “世界上最先进的开源关系数据库” 了,完成工作的同时,也扩展了自己的技术栈!
与Mysql的区别
事务支持

    MySQL只有innodb引擎支持事务,事务一致性保证上可根据实际需求调整。
    VastBase支持事务的强一致性,事务保证性好,完全支持ACID特性。

SQL标准支持

    MySQL只支持部分SQL标准,相比于Vastbase支持类型稍弱。
    VastBase几乎支持所有的SQL标准,支持类型相当丰富。

数据复制

    MySQL的复制是基于binlog的逻辑异步复制,无法实现同步复制。
    Vastbase可以做到同步,异步,半同步复制,以及基于日志逻辑复制,可以实现表级别的订阅和发布。

性能方面:
Vastbase:

    Vastbase在OLTP/ OLAP系统中表现良好,读写速度以及大数据分析方面表现良好。

MySQL

    MySQL是广泛选择的基于Web的项目,需要数据库只是为了简单的数据事务。但是,当遇到重负载或尝试完成复杂查询时,MySQL通常会表现不佳。
    MySQL的读取速度,在OLTP系统中表现良好。
    MySQL + InnoDB为OLTP场景提供了非常好的读/写速度。总体而言,MySQL在高并发场景下表现良好。
    MySQL是可靠的,并且与商业智能应用程序配合良好,因为商业智能应用程序通常读取很多。

数据类型

Mysql: https://dev.mysql.com/doc/refman/8.0/en/numeric-types.html
Vastbase: https://docs.vastdata.com.cn/zh/docs/VastbaseG100Ver2.2.5/doc/%E5%BC%80%E5%8F%91%E8%80%85%E6%8C%87%E5%8D%97/SQL%E5%8F%82%E8%80%83/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html
可简单参考下图:
请添加图片描述
请添加图片描述
请添加图片描述
MySQL 数据表转换到 Vastbase 时,数据类型转换参考下表
MySQL    Vastbase
char    character
varchar    character varying
tinytext    text
mediumtext    text
text    text
longtext    text
tinyblob    bytea
mediumblob    bytea
blob    bytea
longblob    bytea
binary    bytea
varbinary    bytea
bit    bit varying
tinyint    smallint
tinyint unsigned    smallint
smallint    smallint
smallint unsigned    integer
mediumint    integer
mediumint unsigned    integer
int    integer
int unsigned    bigint
bigint    bigint
bigint unsigned    numeric
float    real
float unsigned    real
double    double precision
double unsigned    double precision
decimal    numeric
decimal unsigned    numeric
numeric    numeric
numeric unsigned    numeric
date    date
datetime    timestamp without time zone
time    time without time zone
timestamp    timestamp without time zone
year    smallint
enum    character varying (with check constraint)
set    ARRAY[]::text[]

需要注意的点有:

    MySQL 转 Vastbase 时,数据类型的范围一定要从小转到大,否则可能会插入值失败
    Vastbase 中建表时,并没有自带递增序列,但我们可以自定义序列,然后再建表时使用,步长可自定义,示例如下:

    CREATE SEQUENCE tbl_scs_alarm_file_map_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

    alter table tbl_scs_alarm_file_map alter column id set default nextval('tbl_scs_alarm_file_map_id_seq');
        1
        2
        3
        4
        5
        6
        7
        8

    Vastbase 的时间是带时区的,要注意是否需要

函数、操作符

Mysql:https://dev.mysql.com/doc/refman/8.0/en/functions.html
Vastbase:https://docs.vastdata.com.cn/zh/docs/VastbaseG100Ver2.2.5/doc/%E5%BC%80%E5%8F%91%E8%80%85%E6%8C%87%E5%8D%97/SQL%E5%8F%82%E8%80%83/%E5%87%BD%E6%95%B0%E5%92%8C%E6%93%8D%E4%BD%9C%E7%AC%A6.html
需要注意的有:

    函数太多了就没一一列举了,如果有对应的函数直接替换即可
    之后会介绍自动转换SQL的方法,可以参考转换后的函数
    如果没有对应的函数,只能写其它SQL、存储函数(不推荐)或业务代码代替

SQL语法

Mysql:https://dev.mysql.com/doc/refman/8.0/en/programs.html
Vastbase:https://docs.vastdata.com.cn/zh/docs/VastbaseG100Ver2.2.5/doc/%E5%BC%80%E5%8F%91%E8%80%85%E6%8C%87%E5%8D%97/SQL%E5%8F%82%E8%80%83/%E5%87%BD%E6%95%B0%E5%92%8C%E6%93%8D%E4%BD%9C%E7%AC%A6.html

  其实80%的SQL语法是一致,重点在于剩下的20%,即我们SQL需要修改的地方,以下列举常见的SQL语法转换
MySQL 写法    Vastbase 写法
` ’ "(支持三种引号)    ’ "(只支持单双引号,双引号表示字段和函数等,单引号表字符串)
limit 100,10;    limit 10 offset 100;
GROUP_CONCAT(r.name)    array_to_string(array_agg(r.name), ‘,’)
and FIND_IN_SET(d.type, #{devTags})    and d.type = ANY(STRING_TO_ARRAY(#{devTags}, ‘,’))
IFNULL()    COALESCE()
delete t from table1,table2 where table1.id = table2.code    delete from table1 where table1.id in (select table2.code from table2)
now()    now() 或 CURRENT_TIMESTAMP
DATE_FORMAT(“alarmEndTime”,‘%Y-%m-%d %H:%i:%s’ )    TO_CHAR(“alarmEndTime”,‘YYYY-MM-DD HH24:MI:SS’)
from dual    不写
IF()    CASE WHEN THEN ELSE END
DATEDIFF(createTime,NOW())    date_part( ‘day’,date_trunc(‘day’,“createTime”) - date_trunc(‘day’,CURRENT_TIMESTAMP))
SELECT data, dataType From tbl_data;    SELECT data, “dataType” From tbl_data; (驼峰字段必须加双引号)
注:需要注意的有:    

    当SQL书写不是很规范,MySQL检查也不很严,在转换SQL时,需要改成正确的值,因为Vastbase检查比较严格,比如字段名为:dataType,mysql 写成 select dataType、datatype,DATATYPE都是可以查询的,而Vastbase只能写成select “dataType” … 才行
    字段都是驼峰命名时,所有需要加双引号才能查询…
    ` 此引号,只有MySQL中有用,Vastbase中无用,直接全部删除即可

连接与使用工具
命今行介绍

  Vastbase的命令行工具,和Mysql的命令行工具一样,可用于写SQL和赋权操作等。在Vastbase服务正常启动的情况下,以操作系统用户 vastbase 登录数据库主节点,而后使用以下命令即可正常连接。

vsql -d vastbase -p 5432

    1



vsql -d vastbase -h 10.10.0.11 -U vb -p 5432 -W Test@123

    1

请添加图片描述
命令行常用命令

  vb_ctl 和Mysql的命令行类似,这里不再过多说明,主要讲讲常用的命令,其中 \h 和 ? 最重要,可用于查看其它命令。

-- 启动数据库
vb_ctl start -D 数据库目录 或 vb_ctl start

-- 关闭数据库
vb_ctl stop -D 数据库目录 或 vb_ctl stop

-- 切换数据库
\c dbname

-- 查看帮助(重要)
\h

-- 查看快捷帮助(重要)
\?

-- 列出所有数据库
\l

-- 列出所有当前数据库表
\d

-- 列出表的所有字段
\d tablename

-- 列出表的基本情况
\d+ tablename

-- 退出
\q

-- 查看索引
\di

-- 查看系统表
\dtS

-- 查看用户
\du    or   \dg

-- 显示表的权限分配情况
\dp

-- 查看连接数
\du

-- 查看视图
\dv   or  \d+ viewname

-- 创建用户
CREATE USER test WITH PASSWORD 'Test@123';

-- 创建角色
CREATE ROLE test WITH PASSWORD 'Test@123';

-- 创建数据库
CREATE DATABASE testdb;

-- 赋权
GRANT ALL PRIVILEGES ON DATABASE testdb to test;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO test;

-- 更改数据库所有者
ALTER DATABASE testdb OWNER TO test;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63

navicat介绍

  Vastbase是可以用Navicat连接与使用的,我们直接用PostgresSQL的连接方式即可
请添加图片描述
配置也和PostgresSQL的类似即可,不过这里需要注意的是,默认的初始用户vastbase是不支持远程连接的,所以我们需要自己新建一个用户,再连接即可:
请添加图片描述
用Nvavicat连接后,我们可以看到,此界面的操作和mysql的操作是一致的,这里不再展开。
请添加图片描述
与项目整合方法

  官方项目整合地址:基于ORM框架的适配
  官方整合方式里,有一个小问题,就是需要 “Maven本地导入vastbase-2.0依赖” ,因为这个包Maven官方是没有的,我也没有在海量数据的官方网站找到
请添加图片描述
后来经过尝试,可以直接用PostgresSQL驱动即可,Maven官方也有此依赖,更加方便一些,所以具体整合步骤为:

    Step1: 直接导入 postgresql 依赖

        <!-- postgresql 用以连接 vastbase -->
        <dependency>
           <groupId>org.postgresql</groupId>
           <artifactId>postgresql</artifactId>
           <version>42.2.12</version>
        </dependency>

    1
    2
    3
    4
    5
    6

    Step2:配置数据源和驱动

allcam.database.host=172.16.11.120:5432
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.name=druid_datasource
spring.datasource.druid.driver-class-name=org.postgresql.Driver
spring.datasource.druid.url=jdbc:postgresql://${allcam.database.host}/acsdb?currentSchema=public
spring.datasource.druid.username=vb
spring.datasource.druid.password=password
spring.datasource.druid.initial-size=20
spring.datasource.druid.max-active=40
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1
spring.datasource.druid.test-while-idle= true
spring.datasource.druid.test-on-borrow= false
spring.datasource.druid.test-on-return= false

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

迁移数据库

  这里主要介绍三种迁移数据库的方式,第一种是手动迁移数据库,第二种是用Navicat迁移,第三种是用海量数据的付费迁移工具exBase。如果对数据库性能与存储空间有严格要求,且库和数据不是很大的情况下,建议用手动迁移数据库,但这种方式工作量大,且对开发者要求更高。除此之外,我们更建议使用自动迁移的方式,自动迁移方便快捷,如果原库符合开发规范的情况下,迁移的郊果也不错,如果需要优化,也可在迁移的结果下,二次修改表结构与数据。
手动

  将原Msql数据库以SQL的形式导出,然后用文本操作工具(例如Sublime Text),按Vastbase语法进行替换操作即可。工作量太大,如果数据表不多,对性能和存储空间有严格要求的话,可以考虑。
Navicat 迁移(推荐)

   其实 Navicat Premium 自带就有,异库迁移数据库功能,接下来演示一下操作流程:

    首先选择 工具 --> 数据传输…
    请添加图片描述
    配置源和目标信息
    请添加图片描述
    点击选项后,根据需要配置,但一定要选择遇到错误时继续,我们运行完成后再根据迁移报错,对数据库进行补偿即可
    请添加图片描述
    选择要迁移的表,这里是选择所有的数据表,根据需要选择即可
    请添加图片描述
    最后点击开始,等待完成即可
    请添加图片描述

  这里需要注意的点是:如果原Mysql的数据库创建的不够规范,那么迁移数据库时一定会有ERROR出现,比如在Mysql中,两张表的引索名称一样,都叫index_type,在Mysql中这种行为是被允许的,但PostgreSQL是不被允许的。那么迁移到PostgreSQL时,第一个索引会创建成功,但第二个会报错。此时我们的解决方法是,报错后,我们再以SQL的形式,重新手动写入第二索引,进行一个补偿行为即可。
改写SQL

  改写SQL这里推荐两种方式。
手动

   根据Vastbase语法,把原MySQL语句转换即可,可在navicat或其它客户端工具中,对SQL进行验证,需要细心的编写,对语言熟练度也有一定要求
在线网站

  SQL手动转换其实工作量还是很大的,这里提供一下在线的转换SQL的网站,https://www.jooq.org/translate/ ,拉到页面下方,我们分别设置为MySQL和PostgreSQL 9.3即可(经过测试,无kexue上网的情况下,可能不会翻译)

请添加图片描述
这个网站不仅支持这两种SQL转换,共支持多达二十多种SQL语言的相互转换!
请添加图片描述
接下来,左边写源SQL,右边即会自动生成目标SQL
请添加图片描述
  但令人难受的是,经过实践后我们发现,这些SQL转换,如果在左边SQL不是很规范的情况下,右边生成的SQL可能会有问题,不能直接使用,需要我们人为的改动一下!
最后

  最后,Vastbase就介绍完了,关注我,以后给大家介绍更专业的知识点。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_22136439/article/details/127207710

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

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

相关文章

易优eyoucms网站报错 /core/library/think/db/Connection.php 第 389 行左右,如何解决?

SQLSTATE[42S22]: Column not found: 1054 Unknown column groupid in where clause 遇到“SQLSTATE[42S22]: Column not found: 1054 Unknown column groupid in where clause”这类错误,通常是因为数据库表结构与代码中的查询不匹配。具体来说,可能是数据库表中缺少某个列(…

【HFSS】HFSS绘制梯形走线的5种方法

使用HFSS仿真PCB走线,需要对走线进行建模,但是由于PCB制造过程中的蚀刻导致走线截面不是理想的矩形,而是接近梯形。为了使仿真尽量精确,需要将PCB走线截面绘制成梯形。下面介绍几种绘制梯形走线的方法。 方法一:修改line参数直接生成梯形 1)画一条线100mil,右侧窗口选中…

汇总区间

给定一个有序的list, 需要根据数据的连续性进行区间的汇总实例如下: 解决方法:设置左右指针,固定左指针,当右指针对应的数+1=右指针+1对应的数 and 右指针不要越界,就移动右指针,直到跳出while,并更新左指针=右指针+1class Solution(object):def summaryRanges(self, n…

element-plus 如何修改el-table 滚动条高度,el-table滚动条放置在表格外面

element-plus el-table 滚动条高度, el-scrollbar,滚动条放置在表格外面,滚动条放置在表格外部先上效果图: 实现方式,自定义全局的element样式如下:/** * 表格滚动条 */// 横向滚动条高度 $scrollbarheight: 15px; .el-scrollbar {//偏移.el-scrollbar__bar{bottom: 1p…

MindSearch 快速部署

基础任务(完成此任务即完成闯关)按照教程,将 MindSearch 部署到 HuggingFace 并美化 Gradio 的界面,并提供截图和 Hugging Face 的Space的链接。MindSearch 部署到Github Codespace 和 Hugging Face Space 和原有的CPU版本相比区别是把internstudio换成了github codespace。…

小程序隐私合规自查指南

一 背景:小程序作为一种轻量级应用,广泛应用于各大互联网平台。工信部通报2022年第5批侵害用户权益名单中首次出现8款违规小程序。各监管单位对“小程序”违规收集个人信息监控手段和监控力度不断加强。 工信部APP违法违规通报 上海市委网信办查处违规小程序二、小程序隐私合…

Jmeter的简单使用一:http请求

1、创建线程组setUp和tearDown线程组类似测试用例的测试开始之前执行某些初始化操作,如环境准备、数据库连接和释放数据库连接2、设置线程组Ramp-Up时间(以秒为单位)是指从开始到所有线程都达到活动状态的时间。例如,如果你设置了10个线程,并且Ramp-Up时间为20秒,那么JMe…

Flags

Flags是位字段的序列,当其中任何一个位不为零且广播可连接时广播包中应包含flags. 否则,flags可以被忽略。flags只能包含在广播包中,扫描响应包中不能包含flags。flags的作用是在广播包中加入如下标志:有限可发现模式;一般可发现模式;不支持BR/EDR;设备同时支持LE和BR/E…

Oracle 19c OCP 认证考试 082 题库(第23题)- 2024年修正版

【优技教育】Oracle 19c OCP 082题库(Q 23题)- 2024年修正版 考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为(CUUG 原创)整理并解析,转发请注明出处,禁止抄袭及未经注明出处的转载。 原文地址:http://www.cuug.com/index.php?s=/home/article/deta…

windows7遇到不兼容如何解决

概述: 低版本的Windows缺乏一些高版本中所新增的系统接口,而VxKex可以为程序提供这些缺失的接口从而使其正常运行 当然VxKex不仅可以用于lucky也可以使其他一些最低要求为win10的程序在win7上运行起来 详情见其github项目地址 不过目前对游戏的效果不佳 国内加速下载下载:http…

一文搞定WeakHashMapE0

写在前面 在缓存场景下,由于内存是有限的,不能缓存所有对象,因此就需要一定的删除机制,淘汰掉一些对象。这个时候可能很快就想到了各种Cache数据过期策略,目前也有一些优秀的包提供了功能丰富的Cache,比如Google的Guava Cache,它支持数据定期过期、LRU、LFU等策略,但它…

windows7不支持一些程序的运行,如何解决

低版本的Windows缺乏一些高版本中所新增的系统接口,而VxKex可以为程序提供这些缺失的接口从而使其正常运行 当然VxKex不仅可以用于lucky也可以使其他一些最低要求为win10的程序在win7上运行起来 详情见其github项目地址 不过目前对游戏的效果不佳 国内加速下载下载:https://da…