国产化 | 走近人大金仓-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语言参考手册

猜你喜欢

转载自blog.csdn.net/yxd179/article/details/131959711