相比其他关系型数据库,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.mfbz.cn/a/181835.html

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

相关文章

在PCL视图器中使用随机生成的颜色来可视化一组匹配的点对

std::vector<Eigen::Vector2d> centroids_unknown_motion_underk; std::vector<Eigen::Vector2d> centroids_unknown_motion_k; // 进行数字填充 pcl::visualization::PCLVisualizer viewer("Centroid Visualization");int id 0;// 添加 XY 坐标系doub…

中国人总爱乱吃药,这些家庭常见药我劝你别乱吃!

你可能在各种抖音快手上都看到过博主推荐生活小窍门—— 比如巧用二甲双胍减肥&#xff0c;六味地黄丸包治百病&#xff0c;阿司匹林巧治高血压…… 世上本没有神药&#xff0c;用得多了&#xff0c;也就变成神药了。 ——这句话鲁迅没说&#xff0c;也没有任何道理可言。 说…

uni-app开发小程序,利用scroll-view实现自动滚动至对应数据

uniapp scroll-view 官网 vue文件内容&#xff1a;dom: <scroll-view scroll-y :scroll-into-view"seqToView"><view class"pop-scroll"><viewv-for"(item,index) in seqList":id"seq- item":key"index"cl…

ubuntu20.04安装多版本cuda,切换版本

1. 安装cuda toolkit: 下载网站 https://developer.nvidia.com/cuda-11.3.0-download-archive 选择版本&#xff0c;这里选择11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run给cuda权限: chmod x…

数据结构与算法【红黑树】的Java实现+图解

前言 建议先阅读普通二叉搜索树与平衡二叉搜索树的文章。理解一些基本的二叉树知识数据结构与算法【二叉搜索树】Java实现-CSDN博客 介绍 红黑树也是一种自平衡的二叉搜索树&#xff0c;较之 AVL&#xff0c;插入和删除时旋转次数更少。 首先介绍代码实现会用到的概念 兄弟…

python-opencv在图片中绘制各种图形

python-opencv在图片中绘制各种图形 1.绘制直线 2.绘制矩形 3.绘制圆 4.绘制椭圆 5.绘制多边形 6.嵌入文字 实现代码都在下面了&#xff0c;代码中参数做了简单注释 import copy import math import matplotlib.pyplot as plt import matplotlib as mpl import numpy a…

OpenStack云计算平台-启动一个实例

目录 一、创建虚拟网络 ​二、创建m1.nano规格的主机 三、生成一个键值对 四、增加安全组规则 ​五、启动一个实例 1、确定实例选项 2、创建实例 3、使用虚拟控制台访问实例 4、验证能否远程访问实例 一、创建虚拟网络 下面的说明和框图使用示例IP 地址范围。你必须依…

单个视频生成视频二维码,手把手图文教程

单个视频生成视频二维码帮助教程&#xff08;图文教程&#xff09;&#xff0c;手把手教程如下&#xff1a; STEP1 注册帐号 使用视频二维码&#xff0c;您需要注册酷播云用户帐号&#xff08;免费5G空间&#xff0c;普通用户够用&#xff09;。 参考如图1-1&#xff0c;按照…

关于ElectronVue3中集成讯飞星火AI

前言&#xff1a;我的最终目的是为了在QQ上集成一个AI机器人&#xff0c;因此在这里先实现一个简单的集成 先上效果图 总体还是很简单的&#xff0c;我在调用websock获取回复内容的基础上另外集成了一个事件总线&#xff0c;让我们在调用获取消息的时候能够更加方便快捷 工具代…

前端学习--React(3)

一、Redux 集中状态管理工具&#xff0c;不需要react即可使用&#xff0c;每个store的数据都是独立于组件之外的 vue小链接&#xff1a;vuex/pinia 基本使用 Redux将数据修改流程分成三个概念&#xff0c;state、action和reducer state - 一个对象 存放我们管理的数据状态 a…

OpenStack云计算平台-镜像服务

目录 一、镜像服务概览 二、安装和配置 1、先决条件 2、安全并配置组件 3、完成安装 三、验证操作 一、镜像服务概览 OpenStack镜像服务是IaaS的核心服务&#xff0c;如同 :ref:get_started_conceptual_architecture所示。它接受磁盘镜像或服务器镜像API请求&#xff0c;…

2023服务端测试开发必备技能:Mock测试

什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开发完成&#…

浅谈电气设备的绝缘在线监测与状态维修探究

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;在线监测是控制好电气设备绝缘的重要方式&#xff0c;为电力系统稳定奠定重要基础。在线监测电气设备时&#xff0c;要利用检测技术促进电力系统运行效率提升&#xff0c;让电气设备在具体工作过程中发挥更大作…

YAML 深入解析:从语法到最佳实践

什么是YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化语言。它的设计目标是使数据在不同编程语言之间交换和共享变得简单。YAML采用了一种简洁、直观的语法&#xff0c;以易于阅读和编写的方式表示数据结构。 YAML广泛应用于配置文…

外部 prometheus监控k8s集群资源(pod、CPU、service、namespace、deployment等)

prometheus监控k8s集群资源 一&#xff0c;通过CADvisior 监控pod的资源状态1.1 授权外边用户可以访问prometheus接口。1.2 获取token保存1.3 配置prometheus.yml 启动并查看状态1.4 Grafana 导入仪表盘 二&#xff0c;通过kube-state-metrics 监控k8s资源状态2.1 部署 kube-st…

php生成xml数据

在PHP中&#xff0c;你可以使用以下几种方法生成XML数据&#xff1a; 使用DOM扩展&#xff1a; $xml new DOMDocument(1.0, UTF-8); $root $xml->createElement(root); $xml->appendChild($root); $child $xml->createElement(child); $root->appendChild($ch…

鸿蒙原生应用/元服务开发-AGC分发如何配置签名信息

使用制作的私钥&#xff08;.p12&#xff09;文件、在AGC申请的证书文件和Profile&#xff08;.p7b&#xff09;文件&#xff0c;在DevEco Studio配置工程的签名信息&#xff0c;以构建携带发布签名信息的APP。 1.打开DevEco Studio&#xff0c;菜单选择“File > Project S…

IP定位揭秘:如何揪出SEM、百度竞价恶意点击

在当今的数字营销领域&#xff0c;搜索引擎营销&#xff08;SEM&#xff09;和百度竞价成为了企业推广的重要手段。然而&#xff0c;随着这些渠道的普及&#xff0c;恶意点击现象也日益严重。恶意点击主要来自竞争对手&#xff0c;或是竞价服务的提供商&#xff0c;他们通过点击…

听GPT 讲Rust源代码--src/tools(2)

题图来自AI生成 File: rust/src/tools/rust-analyzer/crates/hir-def/src/src.rs rust-analyzer 是一个 Rust 语言的语法分析器和语义分析器&#xff0c;用于提供代码补全、导航、重构等开发工具。而 rust-analyzer 的代码实现存储在 rust/src/tools/rust-analyzer 这个文件夹中…
最新文章