引入
事务隔离级别 || KingbaseES数据库
开篇
1、KingbaseES数据库
百度百科:金仓数据库的最新版本为KingbaseES V8, KingbaseES V8在系统的可靠性、可用性、性能和兼容性等方面进行了重大改进,支持多种操作系统和硬件平台支持Unix、Linux和Windows等数十个操作系统产品版本;支持X86、X86_64及国产龙芯、飞腾、申威等CPU硬件体系结构。并具备与这些版本服务器和管理工具之间的无缝互操作能力。
实战
这里,我们来记录一次在Linux操作系统上,进行KingbaseES数据库事务隔离级别实践总结:
1、版本选取
2、基本操作
首先,我们进入数据库ksql命令行界面,测试数据库连接是否正常
ksql test system
查看进程
ps -ef | grep kingbase
查看数据库系统的数据库列表
\l
从上面,我们可以看到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
创建表
CREATE TABLE t01(id int,name text);
插入数据
INSERT INTO t01 values (1,'a'),(2,'b'),(3,'c');
查看关联列表
\dt
查询插入的数据
select * from t01;
从上可知,我们对ksql命令行工具也有所了解,接下来,让我们一起走近KingbaseES的事务隔离级别><
数据库事务的概念:
a) 事务是一组原子性的SQL操作。
b) 事务由事务开始与事务结束之间执行的全部数据库操作组成,具有ACID(原子性、一致性、隔离性、持久性)四大基本特征。
没有事务隔离技术并发事务间可能会出现的情况:
a)幻读(表现在数量的前后变化)
i)第一种情况
ii)第二种情况
b)脏读(表现在未提交事务产生的中间数据)
c)不可重复读
查看数据库默认隔离级别:
show default_transaction_isolation;
指定常用隔离级别对应上述可能存在情况:
a)read committed 隔离级别 -> 避免脏读
开启 会话1、会话2
b)read committed 隔离级别 -> 会出现不可重复读
开启 会话1、会话2
(注:会话2中未明确开启事务,默认为read committed级别)
c)read committed 隔离级别 -> 会出现幻读
开启 会话1、会话2
d)repeatable read 隔离级别 -> 避免脏读
开启 会话1、会话2
e)repeatable read 隔离级别 -> 支持重复读
开启 会话1、会话2
f) repeatable read 隔离级别 -> 避免幻读
开启 会话1、会话2
(注:对每一次操作的案例进行事务提交,结束或回滚,则能相应地看到数据是否正常插入、显示、回滚)
3、适配改造
最后,我们在项目工程中去替换传统数据库Oracle/MySql/SqlServer,实现国产化数据库平滑替代:
// 驱动-连接地址-账号-密码等信息
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语言参考手册