首页 > 数据库 >国产数据库VastBase适配指南

国产数据库VastBase适配指南

时间:2024-09-19 15:13:41浏览次数:8  
标签:VastBase -- 适配 数据库 MySQL E5% SQL Vastbase

 

背景

  目前数据库市场上,仍然是甲骨文、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

标签:VastBase,--,适配,数据库,MySQL,E5%,SQL,Vastbase
From: https://www.cnblogs.com/gaoyanbing/p/18420588

相关文章

  • GBase 8a数据库清理日志释放空间
    日志清理的目的是为了释放磁盘存储空间。对于重要日志信息,运维人员可以先考虑备份后再做清理。日常巡检中,考虑清理的日志有:1、所有管理节点的gc_recover日志gc_recover进程服务是集群数据一致性同步服务,在各gcluster节点上运行。集群在执行DDL、DML语句时,因某种原因,出现......
  • GBase 8a数据库故障排查思路
    GBase8a数据库故障排查思路一、监控进程集群默认运行gcmonit进程用来监控gcluster、gcware、gcrecover、gcmmonit、gbase、syncserver进程,当这些进程意外down掉,gcmonit进程会自动将这些进程拉起。同时,gcmmonit进程又会监控gcmonit进程,当gcmonit进程down掉,gcmmoni......
  • GBase 8a数据库关键日志
    GBase8a关键日志1、System日志:记录数据库服务启动、停止等重要操作,并可记录数据库服务宕机等异常情况的程序堆栈,可辅助开发人员查错。默认开启。System日志分类及默认存放位置:gcluster系统日志:$GCLUSTER_BASE/log/gcluster/system.loggnode系统日志:$GBASE_BASE/log/gba......
  • GBase 8a MPP Cluster 数据库产品的巡检
    GBase8aMPPCluster产品的巡检一般包含以下几个方面工作:1、检查数据库的接入情况2、检查数据库状态3、检查Core文件或dump文件4、检查系统情况(1)查看数据库连接巡检的第一步就是要验证数据库是否可访问。数据库可访问代表数据库客户端和服务端的网络端口和服务正常。......
  • GBase 8a数据库集群部署硬件环境需求
    GBase8aMPPCluster具有多样化的平台选择,可完全使用低成本的x86架构的PCServer;也支持云平台、虚拟机环境的部署。随着国产服务器、国产CPU的发展,也支持在申威、龙芯、兆芯、鲲鹏、飞腾等的国产服务器上部署。GBase8aMPPCluster支持64位计算机操作系统平台上,支......
  • 快速比较两个数据库所有表的字段是否一致
    背景在开发时,常常会有开发环境,测试环境,生产环境。当开发环境中的数据库结构发生变化时,往往需要同步到测试环境和生产环境,但是有时候会忘记同步了。那么,如何快速判断两个数据库的所有表字段是否一致呢?需要工具:navicat(或类似数据库工具),BeyondComapre(或类似文本比较工具)。导出数......
  • 易优eyoucms网站请检查数据库连接信息,Access denied for user 'root'@'localhost' (us
    当你遇到“Accessdeniedforuser'root'@'localhost'(usingpassword:YES)”这样的错误时,这意味着数据库系统拒绝了你的连接请求,通常是由于提供的凭据不正确。你可以按照以下步骤来检查和修改数据库连接信息:检查数据库连接信息:确认数据库用户名(通常是root)、密码、以及数......
  • 易优eyoucms网站数据库文件版本号(v1.3.9)与CMS源码版本号(v1.4.1)不一致,无法安装,如何解决
    当遇到数据库文件版本号与CMS源码版本号不一致的问题时,可以采取以下两种方法来解决:第一种方法:回原网站备份数据库再搬家回到原网站备份数据库:登录原网站的数据库管理系统(如phpMyAdmin或通过命令行)。备份整个数据库。导出数据库文件,并保存到本地。在新服务器上导入数......
  • 易优eyoucms网站安装时出现“数据库连接失败,请重新设定”的错误
    遇到易优CMS在安装时出现“数据库连接失败,请重新设定”的错误,通常是因为数据库连接信息不正确或环境配置问题。以下是一些详细的解决步骤:解决步骤检查数据库连接信息检查数据库状态检查防火墙和安全组设置检查数据库用户权限清理安装锁文件手动导入数据库1.检查数据库......
  • H5适配以及兼容问题---转存自掘金--lzg9527
     vue知识体系之基础入门篇JS基础总结(1)——数据类型JS基础总结(2)——原型与原型链JS基础总结(3)——作用域和闭包JS基础总结(4)——this指向及call/apply/bindJS基础总结(5)——JS执行机制与EventLoopdhtml篇常用的meta属性设置meta对于移动端的一些特殊属性,可根据需要自行......