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

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

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

本文将通过亚信安慧AntDB中的JDBC为大家着重介绍JDBC在关系型数据库中的使用方式,同时向大家展示AntDB在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年,在运营商的核心系统上,服务国内24个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

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

相关文章

一文了解Git(所有命令)附带图片

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 其他…

机器学习算法理论:线性回归

线性回归 回归的理论解释&#xff1a;回归分析是确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法。按照自变量和因变量之间的关系类型&#xff0c;可分为线性回归分析和非线性回归分析。 如果在回归分析中&#xff0c;只包括一个自变量和一个因变量&#xff0c;…

【Linux】Linux基础之权限

目录 一、Linux中的用户1.1 用户之间的身份切换1.2 指令提权 二、权限管理2.1 文件权限2.2 权限操作2.3 chown和chgrp 三、文件类型四、目录文件的权限操作五、权限掩码六、粘滞位 一、Linux中的用户 Linux中主要有两种用户&#xff1a; root&#xff0c;超级用户非root&…

Netfilter 是如何工作的(六):连接跟踪信息的入口创建(in)和出口确认(confirm)

Articles (gitee.io) IPtables-朱双印博客 (zsythink.net) 在 Netfilter 是如何工作的(五) 中连接跟踪信息使用的创建-确认机制的 Netfilter在报文进入系统的入口处&#xff0c;将连接跟踪信息记录在报文上&#xff0c;在出口进行confirm.确认后的连接信息 本文以一个本机上送…

【MATLAB】CEEMDAN+FFT+HHT组合算法

代码原理 集成经验模态分解&#xff08;CEEMDAN&#xff09;是一种信号处理方法&#xff0c;旨在将非线性和非平稳信号分解为本质模态函数&#xff08;IMF&#xff09;。这种方法通过对信号进行多轮迭代&#xff0c;结合了噪声干扰的累计退化&#xff0c;从而更好地处理了信号…

关于React你必须知道的3个错误用法。

1. 你知道如何使用“&&”吗? 在React程序中,我经常使用“&&”运算符来决定是否显示内容,如下所示: 我的组长: “你不知道&&运算符的特性吗?当请求还没有成功返回时,会直接渲染“0”。” 我并不信服, 因为我一直都是这样编写代码,从未出过错。为了…

计算机网络技术-2022期末考试解析

【前言】 这是计算机网络技术这门课&#xff0c;感觉和计网还是有不一样的&#xff0c;但也有能做的&#xff0c;把能做的做了。 一、单项选择题&#xff08;每题2分&#xff0c;共20分&#xff09; 1. 用于测试两台计算机连通状况的命令是 。 ( ) A. cmd B. ping C. ipconf…

Java副本的概念

在Java中&#xff0c;"副本"&#xff08;copy&#xff09;一词可以用于描述不同的概念&#xff0c;具体取决于上下文。以下是两个常见的用法&#xff1a; 对象的副本&#xff1a;在Java中&#xff0c;当你创建一个对象并将其赋值给另一个变量时&#xff0c;实际上是创…

配置CentOS系统以支持静态HTTP服务

CentOS是一个流行的Linux发行版&#xff0c;广泛应用于服务器环境。要配置CentOS系统以支持静态HTTP服务&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装Web服务器软件&#xff1a;CentOS自带了Apache HTTP服务器软件&#xff0c;您可以使用以下命令安装它&#xff1…

Go 知多少?

作为一名已接触过其他语言的开发&#xff0c;再去学习一门新语言可比之前轻松不少&#xff0c; 语言之间存在很多相似点&#xff0c;但是新语言也有自己的不同点&#xff0c;通常我会先了解它与其他语言常遇到的不同点有哪些&#xff0c; 使自己先能够上手编写基础程序&#…

Java多线程:初识多线程!左手画方,右手画圆

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、线程与进程二、创建线程方法1、继承Thread类2、实现Runnable接口3、两者区别4、举个栗子5、简洁写法Ⅰ、Thread匿名内部类写…

DNS 正/反向解析 主从复制 分离解析

一 DNS概念它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网 每一台 DNS 服务器都只负责管理一个有限范围 根域: 全球根服务器节点只有13个,10个在美国&#xff0c;1个荷兰&#xff0c;1个瑞典&#xff0c;1个日本 一级域名&#xff…

【已解决】C语言实现多线程的同步与异步

说真的写了这篇博文时&#xff0c;才知道c语言本身不支持多线程&#xff0c;而是一些windowsapi让c语言拥有多线程的能力&#xff0c;那下面内容就以打开对话框为例&#xff0c;展现如何实现多线程的同步与异步。 文章目录 问题起源c语言多线程同步方案c语言多线程异步方案总结…

Typora使用及Markdow学习笔记1

编程如画&#xff0c;我是panda&#xff01; 最近有在学习Markdown&#xff0c;所以这次分享一下我的Markdown学习笔记 目录 前言 一、标题 二、段落 1.换行 2.分割线 三、文字显示 1.字体 2.上下标 四、列表 1.无序列表 2.有序列表 3.任务列表 五、区块 六、代…

【Linux运维】LVM和RAID学习及实践

LVM和RAID学习及实践 背景LVM简介新加硬盘的操作RAID-磁盘阵列应用场景RAID0RAID1其他结构RAID制作RAID 小结 背景 某台服务器的磁盘管理需要自己动手处理&#xff0c;找了一些资料也踩了一些坑&#xff0c;在这里记录一下&#xff0c;先介绍一下LVM和RAID这两个东西。在计算机…

【天龙八部】攻略day6

关键字&#xff1a; 灵武、寻宝要求、雁门 1】灵武选择 西凉枫林&#xff0c;锦带&#xff0c;短匕 白溪湖&#xff0c;明镜&#xff0c;双刺 竹海&#xff0c;玉钩&#xff0c;锁甲 2】楼兰寻宝需求 等级80级&#xff0c;40级前6本心法 3】雁门奖励 简单35*4元佑碎金 普…

慕尼黑工业大学最新提出!单目实时密集建图的混合隐式场方法

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 我们提出了一种新颖的方法&#xff0c;它将基于深度学习的密集SLAM与神经隐式场相结合&#xff0c;实时生成密集地图&#xff0c;而无需像以前的方法那样依赖RGB-…

数据库练习题

素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varchar(10) NO…

java大学生宿舍共享厨房系统宿舍自习室宿舍洗衣房系统源码包含技术文档

主要功能&#xff1a;学生可注册登录&#xff0c;预约自己宿舍楼栋的共享厨房和评价&#xff0c;也可以使用该楼栋的洗衣房&#xff0c;查看洗衣机吹风机的使用情况和报修&#xff0c;还可以进入该楼栋自习室打卡和评价。管理员可管理所有的学生和宿管&#xff0c;分配宿舍&…

10年果粉拯救老掉牙Mac心得(没错我是标题党)

连续两周了&#xff0c;当我不能用Mac,或者说当我闲置了近10年隔三差五的用Mac时&#xff0c;成功发现我的AppleID已经无法登录了。事情是这样的&#xff0c;当我踌躇满志地准备改一篇稿子&#xff08;潜在的稿费啊亲&#xff01;&#xff09;时&#xff0c;发现Pages竟然没有W…