人大金仓数据库JDBC批量插入传输优化功能

关键字:

KingbaseES、JDBC、批量传输、人大金仓、KingbaseES

场景介绍

在数据库使用过程中,不可避免的会遇到大批量数据插入的场景,为了完成数据传输,用户端与数据库服务端会频繁的进行交互,耗费大量的时间。因此,需要对批量数据进行处理,以提高传输的效率。

功能介绍

Kingbase-JDBC提供了一种批量插入语句传输优化功能,该功能的示意图如图1所示。针对用户输入的大量数据插入请求,该功能通过语句解析识别请求,然后通过语句改写的方式,将多组数据插入请求合并为一组数据插入请求,从而减少网络交互的次数,显著提高数据传输效率。

行转列的批量传输优化功能的具体流程如图2所示,用户输入批量数据插入请求,内部执行函数判断该连接是否启用批量插入优化功能,若是,则根据内置的映射规则和语句所绑定的参数个数,计算单次传输的最大数据组数,然后计算出总计所需进行的数据传输次数。根据语句绑定参数个数确定合理的单次数据传输最大组数,可以有效利用网络带宽以及控制网络交互次数。接着循环进行传输优化和数据传输:判断剩余待传输数据组数是否大于等于单次最大传输组数,若是,则合并等同最大传输组数的数据为一行数据,并缓存合并后的语句及对应的参数数据;若不是,则以不大于剩余传输组数的2的最大整数幂,为本次传输的数据组数,合并数据并缓存,直到剩余数据优化完毕。以128为传输组数上限,并每次发送2的整数幂组数据,是参考了通信协议中的Parse报文格式,并合理复用。

图1:行转列批量传输优化方法示意图

图2:行转列批量传输优化方法的实现流程图

使用方法

使用批量插入语句传输优化功能,需要配置参数reWriteBatchedInserts = TRUE,该功能默认是不启用状态。

下图3展示了含2个绑定参数的批量插入语句优化前后性能的对比结果,可以明显的观察出,随着传输数据量的增大,非传输优化模式所需要的传输时间迅速提升,而传输优化模式所需要的传输时间提升相对缓慢。

图3:含2个绑定参数的批量插入语句优化前后性能对比图

BUG修复

在使用过程中,发现该功能存在如下BUG:当语句绑定参数为0时,批量传输优化报错,具体情况如图4所示。

IMG_256

图4: 0个绑定参数语句批量传输异常

原因:当语句绑定参数为0时,设置的批量传输优化语句数目是1024,但是后续最大批量传输优化数目设置值是128,因此直接抛出异常。

修改方法:将绑定参数为0时的传输优化语句数目设置成128,同后续代码逻辑保持一致。

IMG_256

IMG_256

参考文档:

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值