国产化 | 走近人大金仓-KingbaseES数据库

引入

事务隔离级别 || KingbaseES数据库

image.png

开篇

1、KingbaseES数据库

百度百科:金仓数据库的最新版本为KingbaseES V8, KingbaseES V8在系统的可靠性、可用性、性能和兼容性等方面进行了重大改进,支持多种操作系统和硬件平台支持Unix、Linux和Windows等数十个操作系统产品版本;支持X86、X86_64及国产龙芯、飞腾、申威等CPU硬件体系结构。并具备与这些版本服务器和管理工具之间的无缝互操作能力。

实战

这里,我们来记录一次在Linux操作系统上,进行KingbaseES数据库事务隔离级别实践总结:

1、版本选取

image.png

2、基本操作

首先,我们进入数据库ksql命令行界面,测试数据库连接是否正常

ksql test system

image.png

查看进程

ps -ef | grep kingbase

image.png

查看数据库系统的数据库列表

\l

image.png

从上面,我们可以看到databases,分别有security、template0、template1、test…

登录数据库实例,我们也可以执行

ksql -h ip -p 54321 -U user TEST || ksql 'hostaddr=ip port=54321 user=user dbname=TEST' || ksql kingbase://user@ip:54321/TEST

查看表空间列表

\db

image.png

创建表

CREATE TABLE t01(id int,name text); 

image.png

插入数据

INSERT INTO t01 values (1,'a'),(2,'b'),(3,'c'); 

image.png

查看关联列表

\dt

image.png

查询插入的数据

select * from t01;

image.png

从上可知,我们对ksql命令行工具也有所了解,接下来,让我们一起走近KingbaseES的事务隔离级别><

数据库事务的概念

a) 事务是一组原子性的SQL操作。

b) 事务由事务开始与事务结束之间执行的全部数据库操作组成,具有ACID(原子性、一致性、隔离性、持久性)四大基本特征。

没有事务隔离技术并发事务间可能会出现的情况

a)幻读(表现在数量前后变化

i)第一种情况

image.png

ii)第二种情况

image.png

b)脏读(表现在未提交事务产生的中间数据

image.png

c)不可重复读

image.png

查看数据库默认隔离级别

show default_transaction_isolation;

image.png

指定常用隔离级别对应上述可能存在情况:

a)read committed 隔离级别 -> 避免脏读

开启 会话1、会话2

image.png

b)read committed 隔离级别 -> 会出现不可重复读

开启 会话1、会话2

image.png

(注:会话2中未明确开启事务,默认为read committed级别)

c)read committed 隔离级别 -> 会出现幻读

开启 会话1、会话2

image.png

d)repeatable read 隔离级别 -> 避免脏读

开启 会话1、会话2

image.png

e)repeatable read 隔离级别 -> 支持重复读

开启 会话1、会话2

image.png

f) repeatable read 隔离级别 -> 避免幻读

开启 会话1、会话2

image.png

image.png

(注:对每一次操作的案例进行事务提交,结束或回滚,则能相应地看到数据是否正常插入、显示、回滚)

3、适配改造

最后,我们在项目工程中去替换传统数据库Oracle/MySql/SqlServer,实现国产化数据库平滑替代:

image.png

// 驱动-连接地址-账号-密码等信息
String driverClassName = "com.kingbase8.Driver";
String url = "jdbc:kingbase8://ip:port/db";
String username = "rdjc";
String password = "rdjc@123";
// 加载驱动
Class.forName(driverClassName);
// 获取数据库连接对象
Connection con = (Connection) DriverManager.getConnection(url,username,password);
// 获取数据库操作对象
PreparesStatement ps = con.preparesStatement("SELECT COUNT(*) FROM RDJC_KNOW;");
// 执行sql
ResultSet rs= ps.executeQuery();
// 数据库产品名称
DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();
// 这里为国产数据库-适配,在xml指定国产数据库的databaseId奠定基础
System.out.println("数据库产品名称:" + metaData.getDatabaseProductName());
最后需关闭连接close,释放资源->rs-ps-con. 

【我和KingbaseES的故事】记一次国产化数据库适配 | SQL Server 迁移适配人大金仓

总结

全面适配工作改造下来,这也确实给了DBA以及研发工程师对数据库SQL方言语句书写的一些约束规范

尤其是在通过人大金仓数据库认证专家-KCP后,对国产化数据库这些基础软件底层感触颇深,大批量的应用系统建立在国产化数据库基础之上,平稳运行,这无不象征着国产化数据库正在一步步走向各行各业。

对于国产数据库发展对策建议

1、不断加强合作与交流,不断增强产学研用合作,加大开源生态建设的力度,核心技术攻关,推动国产化数据库在不同领域的深入应用。

2、不断提升标准化水平,构建数据库标准体系,持续加强国产化数据库相关检测认证,推动标准落地实施,统一规范屏蔽不同异构数据库并存应用规范,降低应用的难度和成本。

3、不断持续加强国产化数据库战略引导作用,通过相关法律法规来完善健全数据库软件供应链安全评估体系,风险扫描,提供供应链各环节的管理安全评估、等保评估等。

4、不断加强数据库人才培养体系的建设。加强数据库技术认证,拟定人才激励政策,吸引更多高层次人才进入数据库行业,将数据库高级人才纳入高级工程师行列。比如加大高校、科研机构、企业在数据库相关人才培养力度,从政策、待遇等方面吸引和鼓励更多人才进入数据库行业。

当在实际项目工程中,出现厂商中SQL方言函数也覆盖不全的话,则可以@厂商提供,或者通过通用ORM组件的方式去改造SQL,KingbaseES的一些SQL高阶语法参见->KingbaseES SQL语言参考手册

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

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

相关文章

基于罪名法务智能知识图谱(含码源):基于280万罪名预测、20W法务问答与法律资讯问答功能

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量

在PHPenv安装的时候&#xff0c;环境变量默认的PHP版本是7.4的&#xff0c;MySQL的版本是5.7的&#xff0c;要想使用ThinkPHP8来开发&#xff0c;就必须修改环境变量&#xff0c;本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv&#xff0c;网站&…

019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识

019 - STM32学习笔记 - Fatfs文件系统&#xff08;一&#xff09; - FatFs文件系统初识 最近工作比较忙&#xff0c;没时间摸鱼学习&#xff0c;抽空学点就整理一点笔记。 1、文件系统 在之前学习Flash的时候&#xff0c;可以调用SPI_FLASH_BufferWrite函数&#xff0c;将数…

四步从菜鸟到高手,Python编程真的很简单(送书第一期:文末送书2本)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支持&#xff0c;我…

临床医学怎样翻译比较 好

近年来&#xff0c;随着不同国家之间医药行业形成的共同研究趋势&#xff0c;临床翻译对于来自不同国家的医疗人员的合作至关重要。那么&#xff0c;临床医学怎样翻译比较 好&#xff0c;北京哪个翻译公司比较专业&#xff1f; 据了解&#xff0c;临床医学翻译包含患者病历记录…

Linux之 Vim 搜索方式

方式一&#xff1a;快速搜索&#xff08;字符串完全匹配&#xff0c;区分大小写&#xff09; 格式&#xff1a; / 关键词 or &#xff1f; 关键词 /内容 #按回车键搜索 从上到下查找 ?内容 #按回车键搜索 从下到上查找 优点&#xff1a;快速定位到该关键字 回车之后&…

【Lua学习笔记】Lua进阶——Require,三目运算

文章目录 Require短路判断实现三目运算符 Require 这是文件aaa.lua的内容 aaa.lua: a 10 local b 20 print("我是aaa")这是文件example.lua的内容 example.lua: a 100 print(a) require("aaa") --require调用其他脚本文件 print(a) print(b) print(&…

Psim 2022仿真软件的安装--Psim电力仿真实战教程

文章目录 Psim 2022 仿真软件安装及使用教程软件介绍1.下载psim 2022安装软件&#xff0c;有需要的亲请联系作者。2.点击安装文件3.点击进行安装&#xff1a;4.安装完成&#xff0c;打开软件&#xff0c;开始仿真5.仿真模型介绍5.1.单相全控整流电路仿真5.2 三相PFC可控整流电路…

【点选验证码】生成点选验证码图片

生成点选验证码图片 参考博客&#xff1a;https://blog.csdn.net/sinat_39629323/article/details/121989609 from tqdm import tqdm from PIL import Image, ImageDraw, ImageFont, ImageOps import shutil,os import numpy as np import cv2 import math import random fil…

Mysql的增删改查

一.增加数据&#xff08;insert&#xff09; insert into 表名&#xff08;列名1&#xff0c;列名2&#xff0c;列名3&#xff0c;.....列名n&#xff09;values(值&#xff0c;值&#xff0c;值&#xff0c;....值&#xff09; insert into userinfo(id,name,age) values(&quo…

CSS3 实现边框圆角渐变色渐变文字效果

.boder-txt {width: 80px;height: 30px; line-height: 30px;padding: 5px;text-align: center;border-radius: 10px;border: 6rpx solid transparent;background-clip: padding-box, border-box;background-origin: padding-box, border-box;/*第一个linear-gradient表示内填充…

二级制部署kubernetes(1.20)

&#x1f618;作者简介&#xff1a;一名运维工作人员。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;动动小…

RISC-V公测平台发布 · 第一个WEB Server “Hello RISC-V world!”

RISC-V公测平台Web Server地址&#xff1a;http://175.8.161.253:8081 一、前言 Web Server是互联网应用的基础设施&#xff0c;无论是用户访问网站&#xff0c;还是后端服务提供商和开发者构建各种应用程序&#xff0c;Web Server都在其中扮演着至关重要的角色。 显而易见…

服务器 Docker Alist挂载到本地磁盘(Mac版)夸克网盘

1.服务器下载alist 默认有docker环境 docker pull xhofe/alist2.生成容器 -v /home/alist:/opt/alist/data 这段意思是alist中的数据映射到docker 主机的文件夹&#xff0c;/home/alist就是我主机的文件夹&#xff0c;这个文件夹必须先创建 docker run -d --restartalways…

Node.js 安装与版本管理(nvm 的使用)

安装 Node.js Node.js 诞生于 2009 年 5 月&#xff0c;截至今天&#xff08;2022 年 3 月 26 号&#xff09;的最新版本为 16.14.2 LTS 和 17.8.0 Current&#xff0c;可以去官网下载合适的版本。 其中&#xff0c;LTS&#xff08;Long Term Support&#xff09; 是长期维护…

【Matter】基于Ubuntu 22.04 编译chip-tool工具

前言 编译过程有点曲折&#xff0c;做下记录&#xff0c;过程中&#xff0c;有参考别人写的博客&#xff0c;也看github 官方介绍&#xff0c;终于跑通了~ 环境说明&#xff1a; 首先需要稳定的梯子&#xff0c;可以访问“外网”ubuntu 环境&#xff0c;最终成功实验在Ubunt…

Unity XML3——XML序列化

一、XML 序列化 ​ 序列化&#xff1a;把对象转化为可传输的字节序列过程称为序列化&#xff0c;就是把想要存储的内容转换为字节序列用于存储或传递 ​ 反序列化&#xff1a;把字节序列还原为对象的过程称为反序列化&#xff0c;就是把存储或收到的字节序列信息解析读取出来…

iOS中的一些锁

多线程在日常开发中能起到性能优化的作用&#xff0c;但是一旦没用好就会造成线程不安全&#xff0c;本文就来讲讲如何保证线程安全 锁 线程安全 当一个线程访问数据的时候&#xff0c;其他的线程不能对其进行访问&#xff0c;直到该线程访问完毕。简单来讲就是在同一时刻&a…

智能垃圾桶

1.树莓派3B引脚图 2. 原理图 3.舵机线图 搜了这个这么多3b的资料&#xff0c;自己只是想解决如何下程序和运行程序的博客&#xff0c;网上搜集的资料全是讲如何通过SSH或者网线连接树莓派&#xff0c;通过直接连接屏幕的教程较少。 遇到问题&#xff1a;不论是舵机还是其他传…

Fragment的基本用法、Fragment和活动间的通信、Fragment的生命周期、动态加载布局的技巧

一、Fragment的简单用法 1、制作Fragment 1.1 新建一个布局文件left_fragment.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"ve…