相比其他关系型数据库,AntDB JDBC驱动特性有哪些不同之处

摘要:使用Java语言进行各类应用程序的快速开发成为目前比较主要且流行的开发方式。JDBC是 Java 语言中用来连接和操作关系型数据库的 API,在业务程序与关系型数据库通信时,必然会使用JDBC驱动。

本文将通过国产关系型数据库AntDB中的JDBC为大家着重介绍JDBC如何在关系型数据库中发挥驱动作用,同时向大家展示AntDB在JDBC驱动方面的创新特性。

关键字:JDBC,双引擎语法,安全加强,批量更新

​JDBC简介

JDBC是Java数据库连接(Java Database Connectivity),一套操作数据库的规范接口。这套规范接口,经过多次版本迭代,目前使用最多的规范接口是JDBC4.x。关于JDBC规范相关的说明,请参考本文后续中的参考资料章节。

AntDB中JDBC的使用方式

AntDB的JDBC驱动是基于开源数据库PostgreSQL数据库的JDBC驱动进行的二次开发,因此,大部分使用方式与PostgreSQL的使用方式相同。为了区分与PostgreSQL的区别,AntDB的URL中支持两种连接方式:

-jdbc:postgresql://ip:port/dbname,这种方式是AntDB最初提供的驱动中使用的连接方式,为了兼容PostgreSQL的使用习惯,因此进行了保留;

-jdbc:antdb://ip:port/dbname,这种方式是目前AntDB主推的连接方式,用于区分AntDB与其他数据库的连接方式。

例如:

String  url = "jdbc:antdb://10.1.1.1:6655/antdb?grammar=oracle";String  user = "user";String  password = "xxxx";Connection  conn = null;try  {   conn = DriverManager.getConnection(url,  user, password);    conn.setAutoCommit(false);    PreparedStatement psmt =  conn.prepareStatement("insert into test1 values(?,'abc')");    for(int i = 1; i <= 10; i ++){        psmt.setInt(1,i);        psmt.execute();    }    conn.commit();    psmt.close();    conn.close();}catch  (SQLException ex){    System.out.println(ex.getMessage());}finally  {    if(conn != null) {        conn.close();    }}

AntDB的JDBC新特性

1.双引擎支持

AntDB支持Oracle和PostgreSQL双存储引擎,并且可以进行在会话级存储引擎的动态调整。因此,AntDB在JDBC驱动层进行了双引擎的适配开发。目前AntDB的JDBC支持如下两种方式进行双引擎支持。

- 物理连接级支持

通过在JDBC的URL中指定参数’grammar’来对物理连接使用的语法进行控制。可指定为:

  •      oracle

例如:

jdbc:antdb://10.1.1.1:6655/antdb?grammar=oracle;此时,通过该URL创建的物理连接的默认使用的是Oracle语法,用户可以使用Oracle的相关语法对AntDB进行相关的数据操作。

  •      postgres

例如:

jdbc:antdb://10.1.1.1:6655/antdb?grammar=postgres;此时,通过该URL创建的物理连接的默认使用的是PostgreSQL语法,用户可以使用PostgreSQL的相关语法对AntDB进行相关的数据操作。

- 会话级支持

在用户SQL执行之前,通过JDBC提供的接口execute/executeQuery来执行’set grammar=xxx’,其中xxx可为:

  •       oracle

该SQL执行之后,该会话后续执行的所有SQL,都可以使用Oracle语法进行后续的数据操作。

  •       postgres

该SQL执行之后,该会话后续执行的所有SQL,都可以使用PostgreSQL语法进行后续的数据操作。

- 服务实例级支持

通过在AntDB中执行如下SQL,就可以将服务实例的语法统一进行修改:

alter  system set grammar to oracle ;select  pg_reload_conf();

2.安全加强

目前AntDB内核层面支持scram-sha-256、md5、password等口令认证方式(具体参见参考资料部分),而客户端的JDBC只能支持md5和password两种口令认证方式。考虑到scram-sha-256是目前提供的方法中最安全的一种口令认证方式,特此,AntDB对JDBC驱动进行了该认证方式的适配。

使用最新版的AntDB的JDBC驱动(下载地址:http://www.antdb.net/download)即可使用上述的任意一种认证方式。

3.批量删除性能优化

JDBC4的规范中,提供了一类批量处理的规范接口:addBatch/executeBatch/clearBatch等,通过使用这些接口,可以降低应用程序(APP)与数据库的通信次数,大幅降低网络压力,提升业务的处理性能。

例如,批量删除表t中的数据1~100,通过一次网络通信,来删除数据库中的相应行记录。

PreparedStatement psmt =  conn.prepareStatement("delete from t where c1=?");for(int i = 1; i <= 100; i ++){     psmt.setInt(1,i);     psmt.addBatch();}psmt.executeBatch()

上述例子中,通过网络抓包发现,上述的100次删除操作,应用程序只与数据库进行了一次通信:

上述处理中,APP通过批量更新特性,一个批次删除了数据库中100条记录,由于减少了网络通信的次数,利用数据库服务端的处理能力,大幅提升了批量删除的性能。但是,目前的AntDB数据库服务端接收到合并在一起的多个参数时,会逐个进行解析,然后一条一条执行(开源PostgreSQL也是同样的处理逻辑)。

该执行效率比较低下,在大数据量删除的场合下,影响数据的删除效率。基于该背景,AntDB对JDBC驱动进行了优化。通过在JDBC的URL中指定如下参数,可批量对数据库进行删除,大幅提升删除的效率。

-reWriteBatchedDeletes=true时,jdbc驱动内部会改写SQL,将上述SQL会改写成:delete from t1 where id in (1,2,3...)

-reWriteBatchedDeleteSize指定时,改写后的SQL会按照指定的批次进行删除,例如reWriteBatchedDeleteSize设置为3时,改写后的SQL就以3为单位,对所有数据分批执行,例如,'delete from t1 where id in (1,2,3)','delete from t1 where id in (4,5,6)'......

通过该优化,AntDB的JDBC驱动的批量删除性能得到大幅提升(例如,指定为10000时,性能提示150倍左右)。

图1 AntDB中DELETE性能优化效果

4. Oracle兼容性增强

为了支撑Oracle语法环境下的一些数据类型,目前AntDB的Oracle语法环境下,JDBC驱动对如下的Oracle数据类型进行了适配,通过该适配,Oracle语法下对下述数据类型进行操作时就同Oracle的JDBC操作方式保持一致,不需要额外进行转换。

-varchar2

-nvarchar2

-rowid

-oracle.date

-raw

同时,在支持上述数据类型时,为了考虑与开源框架的支持(例如,mybatis),AntDB的JDBC驱动中对如下接口也进行了强化(开源PostgreSQL这些接口将直接抛出异常)。

- CallableStatement.getNString(int)

- PreparedStatement.setNString(int, String)

- ResultSet.getNString(int)

- ResultSet.getNString(String)

AntDB后续优化思路

目前的AntDB的JDBC已经能够满足大部分业务的应用场景,但也有一部分内部实现没有完全支持JDBC4.x规范,会抛出异常(开源PostgreSQL也存在类似问题)。后续的话,根据业务需要,会对这部分接口进行强化。例如:

-PreparedStatement.setNClob

-CallableStatement.getNClob

-ResultSet.getNClob

-PreparedStatement.setNCharacterStream

-CallableStatement.getNCharacterStream

-ResultSet.getNCharacterStream

-Etc.

参考资料

JDBC specification参考:

-JDBC 4.1 Specification (JDBC 4.1). Available at https://download.oracle.com/otndocs/jcp/jdbc-4_1-mrel-spec/index.html

- JDBC 4.0 Specification (JDBC 4.0). Available at http://jcp.org/en/jsr/detail?id=221

- JDBC 3.0 Specification (JDBC 3.0). Available at http://jcp.org/en/jsr/detail?id=54

-JDBC 2.1 API (JDBC 2.1). Available at http://www.oracle.com/technetwork/java/download-141179.html

- JDBC 2.0 Standard Extension API (JDBC extension specification). Available at http://www.oracle.com/technetwork/java/download-141179.html

-JDBC 1.22 API (JDBC 1.22). Available at http://www.oracle.com/technetwork/java/download-141179.html

AntDB的JDBC相关资料

- 手册:

https://jdbc.postgresql.org/documentation/、http://www.antdb.net/72_product

- 下载:

http://www.antdb.net/download

- AntDB的口令认证方式:

https://www.postgresql.org/docs/current/auth-password.html

关于AntDB数据库

AntDB数据库始于2008年,是亚信科技自主研发的分布式关系型数据库品牌,AntDB-M是面向高性能内存型数据库,是AntDB的子产品之一,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近15年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

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

相关文章

【Effective C++】 (六) 继承与面向对象设计

【六】继承与面向对象设计 条款32 &#xff1a; 确保public继承是"is a"的关系 Item 32: Make sure public inheritance models “is-a”. C面向对象程序设计中&#xff0c;最重要的规则便是&#xff1a;public继承应当是"is-a"的关系。当Derived public继…

【uniapp】部分图标点击事件无反应

比如&#xff1a;点击这个图标在h5都正常&#xff0c;在小程序上无反应 css&#xff1a;也设置z-index&#xff0c;padding 页面上也试过click.native.stop.prevent"changePassword()" 时而可以时而不行&#xff0c; 最后发现是手机里输入键盘的原因&#xff0c;输…

大型养殖场需要哪些污水处理设备

大型养殖场是一个涉及环境保护和可持续发展的关键行业&#xff0c;对于处理养殖场产生的污水有着明确的要求和标准。为了确保污水得到有效处理和处理效果达到国家排放标准&#xff0c;大型养殖场需要配备一系列污水处理设备。以下是几种常见的污水处理设备&#xff1a; 1. 水解…

Python入门指南之基本概率和语法基础

文章目录 一、基本概念二、控制流三、函数四、模块五、数据结构六、面向对象的编程七、输入输出八、异常九、Python标准库关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战…

快速排序演示和代码介绍

快速排序的核心是(以升序为例)&#xff1a;在待排序的数据中指定一个数做为基准数&#xff0c;把所有小于基准数的数据放到基准数的左边&#xff0c;所有大于基准数的数据放在右边&#xff0c;这样的话基准数的位置就确定了&#xff0c;然后在两边的数据中重复上述操作

使用 Pinia 的五个技巧

在这篇文章中&#xff0c;想与大家分享使用 Pinia 的五大技巧。 以下是简要总结&#xff1a; 不要创建无用的 getter在 Option Stores 中使用组合式函数&#xff08;composables&#xff09;对于复杂的组合式函数&#xff0c;使用 Setup Stores使用 Setup Stores 注入全局变量…

2 使用React构造前端应用

文章目录 简单了解React和Node搭建开发环境React框架JavaScript客户端ChallengeComponent组件的主要结构渲染与应用程序集成 第一次运行前端调试将CORS配置添加到Spring Boot应用使用应用程序部署React应用程序小结 前端代码可从这里下载&#xff1a; 前端示例 后端使用这里介…

冷链运输车辆GPS定位及温湿度管理案例

1.项目背景 项目名称&#xff1a;山西冷链运输车辆GPS定位及温湿度管理案例 项目需求&#xff1a;随着经济发展带动物流行业快速发展&#xff0c;运输规模逐步扩大&#xff0c;集团为了适应高速发展的行业现象&#xff0c;物流管理系统的完善成了现阶段发展的重中之重。因此&…

eNSP-直连通信实验

实验拓扑&#xff1a; 实验需求&#xff1a; 1. 按照图中的设备名称&#xff0c;配置各设备名称 2. 按照图中的IP地址规划&#xff0c;配置IP地址 3. 测试R1与R2是否能ping通 4. 测试R2与R3是否能ping通 5. 测试R1与R3是否能ping通 实验步骤&#xff1a; 1. 加入设备&…

Astute Graphics 2023(ai创意插件合集)

Astute Graphics 2023是一家专注于图形编辑软件的公司&#xff0c;以制作高质量、功能强大的图像编辑工具而闻名。如Poser Pro、Poser 3D、Smart Shapes、Astute Sketch Pro等。 Astute Graphics的软件具有以下特点&#xff1a; 强大的图像编辑功能&#xff1a;Astute Graphi…

E-R图与关系模式

1. E-R模型 英文全称&#xff1a;Entity-relationship model&#xff0c;即实体关系模型 把现实世界的 实体模型通过建模转换为信息世界的概念模型&#xff0c;这个概念模型就是E-R模型 2. 数据库设计流程 一般设计数据库分为三个步骤 把现实世界的实体模型&#xff0c;通…

大数据湖及应用平台建设解决方案:PPT全39页,附下载

关键词&#xff1a;大数据湖建设&#xff0c;集团大数据湖&#xff0c;大数据湖仓一体&#xff0c;大数据湖建设解决方案 一、大数据湖定义 大数据湖是一个集中式存储和处理大量数据的平台&#xff0c;主要包括存储层、处理层、分析层和应用层四个部分。 1、存储层&#xff…

2. OpenHarmony源码下载

OpenHarmony源码下载(windows, ubuntu) 现在的 OpenHarmony 4.0 源码已经有了&#xff0c;在 https://gitee.com/openharmony 地址中&#xff0c;描述了源码获取的方式。下来先写下 windows 的获取方式&#xff0c;再写 ubuntu 的获取方式。 获取源码前&#xff0c;还需要的准…

Linux之进程替换

创建子进程的目的 创建子进程的第一个目的是让子进程执行父进程对应的磁盘代码中的一部分, 第二个目的是让子进程想办法加载磁盘上指定的程序,让子进程执行新的代码和程序 一是让子进程执行父进程代码的一部分, 比如&#xff1a; 1 #include<stdio.h> 2 #include<…

数据分析基础之《matplotlib(2)—折线图》

一、折线图绘制与保存图片 1、matplotlib.pyplot模块 matplotlib.pyplot包含了一系列类似于matlab的画图函数。它的函数作用于当前图形&#xff08;figure&#xff09;的当前坐标系&#xff08;axes&#xff09; import matplotlib.pyplot as plt 2、折线图绘制与显示 展示城…

【实用】mysql配置 及将线上数据导入本地 问题解决及记录

[ERR] 1292 - Incorrect datetime value: ‘0000-00-0000:00:00‘ for column ‘BIRTH_DATE‘ at row 1 此问题是mysql当前配置不支持日期为空&#xff0c;或者为‘0000-00-0000:00:00‘得情况 1、直接在数据库执行 # 修改全局 set global.sql_mode ONLY_FULL_GROUP_BY,STR…

“老人护工-预约上门” 技术支持网址

我们是一家为新加坡华人提供老人护工上门服务的软件。您可以选择满意的护工&#xff0c;然后提交联系人的信息&#xff0c;我们会在规定的时间安排护工人员上门&#xff0c;然后您线下支付所需的费用 如果您在使用过程中有什么问题&#xff0c;您可以随时联系我们。 邮箱地址&…

Docker部署Vue+Springboot项目

一、部署Springboot项目 1.1先将本地的java项目打成jar包。 再右上角进行maven操作。 1.2将jar包上传到服务器当中。 先再目录/home 下创建一个文件夹&#xff08;classRoom&#xff09;用于存放后端打镜像时需要的文件。 如果是服务器的话可以直接将文件拖拽到想要转移的地方…

基准电压源的工作原理和作用是什么(高精度电压源)

基准电压源是一种能够提供固定、稳定的直流电压输出的电源设备。它广泛应用于精密仪器、测试设备、通信设备等领域&#xff0c;是实现精确电压测量和校准的重要工具。本文将为您介绍基准电压源的工作原理和作用。 一、基准电压源的工作原理 基准电压源采用了高精度的电路设计和…

Sam Altman回归OpenAI,新董事会成员曝光!

11月22日下午&#xff0c;OpenAI在社交平台宣布&#xff0c;在原则上已达成协议&#xff0c;让 Sam Altman重返 OpenAI担任首席执行官&#xff0c;并重组董事会。稍后会公布更详细的内容。 初始董事会成员包括前Salesforce联合首席执行官Bret Taylor&#xff08;担任主席&…