【YashanDB数据库】由于网络带宽不足导致的jdbc向yashandb插入数据慢

简介: 由于网络带宽不足导致的jdbc向yashandb插入数据慢

问题现象
某客户环境,客户的业务使用jdbc驱动向其他操作系统上的yashandb插入90万条数据,耗时大约30分钟。

问题的风险及影响
影响客户的业务处理效率

问题影响的版本
所有的yashandb版本

问题发生原因
jdbc执行batch insert时,是有绑定变量的。在准备好了PreparedStatement以后,jdbc驱动要向yashandb server发送绑定变量的值。

由于网络带宽不足,这些绑定变量的值发送需要耗费一定时间,最终导致了插入数据效率降低。

解决方法及规避方式
提高jdbc所在操作系统与yashandb server所在操作系统网络之间的带宽

问题分析和处理过程
要插入数据表的ddl如下:

CREATE TABLE "LOCATION_INFO_INDEX000001"
(
"ID" VARCHAR(36) NOT NULL,
"VEHICLENO" VARCHAR(11) NOT NULL,
"VEHICLECOLOR" NUMBER(1,0) NOT NULL,
"MILEAGE" NUMBER(11,0) NOT NULL,
"LONGITUDE" NUMBER(16,6) NOT NULL,
"LATITUDE" NUMBER(16,6) NOT NULL,
"HEIGHT" NUMBER(11,0) NOT NULL,
"SPEED" NUMBER(11,0) NOT NULL,
"DIRECTION" NUMBER(11,0) NOT NULL,
"DATETIME" NUMBER(16,0) NOT NULL,
"DATE" VARCHAR(10) NOT NULL,
"ALARM" NUMBER(11,0) NOT NULL,
"STATE" NUMBER(11,0),
"MSGGNSSCENTERID" VARCHAR(255),
"MSGGNSSCENTERNAME" VARCHAR(255),
"INS" NUMBER,
"SEQ" NUMBER,
"UPDATESTATUS" NUMBER,
"UPDATETIME" VARCHAR2(50),
CONSTRAINT "LOCATION_INFO_INDEX000001_PKEY" PRIMARY KEY("ID")) ;
使用如下的java代码作为jdbc客户端向yashandb server插入数据:

public void test_slow_table(Connection conn){
try{
//System.out.println(DBUtil.buildInsertMeta(conn, "SZSJYJTGK", "LOCATION_INFO_INDEX000001"));
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("insert into LOCATION_INFO_INDEX000001(ID ,VEHICLENO ,VEHICLECOLOR ,MILEAGE ," +
"LONGITUDE ,LATITUDE ,HEIGHT ,SPEED ,DIRECTION ,\"DATETIME\" ,\"DATE\" ,ALARM ,\"STATE\" ,MSGGNSSCENTERID ,MSGGNSSCENTERNAME ,INS ,SEQ ,UPDATESTATUS ," +
"add_time,UPDATETIME,by01,by02) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

        System.out.println("1: " + Instant.now());
        long start = System.currentTimeMillis();
        int base = 100900000;
        for(int i = base;i < base+100000; i++) {
            //ID                                                               NOT NULL  VARCHAR(144)
            //System.out.println("add id_" + i);
            ps.setString(1, "id_" + i);
            //VEHICLENO                                                        NOT NULL  VARCHAR(44)
            ps.setString(2, "abcd");
            //VEHICLECOLOR                                                     NOT NULL  NUMBER(1)
            ps.setInt(3,1);
            //MILEAGE                                                          NOT NULL  NUMBER(11)
            ps.setInt(4, i);
            //LONGITUDE                                                        NOT NULL  NUMBER(16,6)
            ps.setInt(5, i);
            //LATITUDE                                                         NOT NULL  NUMBER(16,6)
            ps.setInt(6,i);
            //HEIGHT                                                           NOT NULL  NUMBER(11)
            ps.setInt(7,i);
            //SPEED                                                            NOT NULL  NUMBER(11)
            ps.setInt(8,i);
            //DIRECTION                                                        NOT NULL  NUMBER(11)
            ps.setInt(9,i);
            //DATETIME                                                         NOT NULL  NUMBER(16)
            ps.setInt(10,i);
            //DATE                                                             NOT NULL  VARCHAR(40)
            ps.setString(11, "abcd");
            //ALARM                                                            NOT NULL  NUMBER(11)
            ps.setInt(12,i);
            //STATE                                                                      NUMBER(11)
            ps.setInt(13,i);
            //MSGGNSSCENTERID                                                            VARCHAR(1020)
            ps.setString(14,StringUtil.buildString(256));
            //MSGGNSSCENTERNAME                                                          VARCHAR(1020)
            ps.setString(15,StringUtil.buildString(256));
            //INS                                                                        NUMBER
            ps.setInt(16,i);
            //SEQ                                                                        NUMBER
            ps.setInt(17,i);
            //UPDATESTATUS                                                               NUMBER
            ps.setInt(18,i);
            //ADD_TIME                                                                   TIMESTAMP
            ps.setTimestamp(19,new Timestamp(System.currentTimeMillis()));
            //UPDATETIME                                                                 TIMESTAMP
            ps.setTimestamp(20,new Timestamp(System.currentTimeMillis()));
            ps.setString(21,StringUtil.buildString(256));
            ps.setString(22,StringUtil.buildString(256));


            ps.addBatch();
            if((i+1)%1000 == 0){
                System.out.println("21:" + Instant.now());
                ps.executeBatch();
                conn.commit();
            }
        }
        System.out.println("2:" + Instant.now());
        ps.executeBatch();
        System.out.println("3:" + Instant.now());
        conn.commit();
        System.out.println("4:" + Instant.now());
        long end = System.currentTimeMillis();
        System.out.println("cost:" + (end-start) + " ms");

    }catch (Exception e){
        e.printStackTrace();
    }
}

jdbc客户端和yashandb server不在一个操作系统时,其网络带宽大概为800KB/s

插入10万条数据,大概耗时130s:

同样的jdbc代码在运行yashandb的操作系统上执行,耗时4s左右:

可以得出结论,耗时基本都花在了网络传输上。

相关文章
|
6月前
|
SQL Java 数据库连接
除了JDBC,还有哪些常见的数据库访问技术?
除了JDBC,还有哪些常见的数据库访问技术?
552 2
|
7月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
558 0
|
8月前
|
机器学习/深度学习 数据采集 传感器
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
262 0
|
9月前
|
数据采集 存储 算法
MyEMS 开源能源管理系统:基于 4G 无线传感网络的能源数据闭环管理方案
MyEMS 是开源能源管理领域的标杆解决方案,采用 Python、Django 与 React 技术栈,具备模块化架构与跨平台兼容性。系统涵盖能源数据治理、设备管理、工单流转与智能控制四大核心功能,结合高精度 4G 无线计量仪表,实现高效数据采集与边缘计算。方案部署灵活、安全性高,助力企业实现能源数字化与碳减排目标。
296 0
|
10月前
|
Python
LBA-ECO CD-32 通量塔网络数据汇编,巴西亚马逊:1999-2006,V2
该数据集汇集了1999年至2006年间巴西亚马逊地区九座观测塔的碳和能量通量、气象、辐射等多类数据,涵盖小时至月度时间步长。作为第二版汇编,数据经过协调与质量控制,扩展了第一版内容,并新增生态系统呼吸等相关计算数据,支持综合研究与模型合成。数据以36个制表符分隔文本文件形式提供,配套PDF说明文件,适用于生态与气候研究。引用来源为Restrepo-Coupe等人(2021)。
441 1
|
6月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
269 0
|
7月前
|
机器学习/深度学习 数据采集 运维
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
|
9月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
229 4
|
10月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
12月前
|
SQL 测试技术 数据库
【YashanDB知识库】IMP跨网络导入慢问题
问题现象:290M数据,本地导入2分钟,跨机导入耗时显著增加(最高30分钟)。 原因分析:`imp`逐条SQL通过网络传输至yashanDB执行,交互频繁导致性能下降。 影响版本:客户测试环境22.2.8.3。 解决方法:将导入文件上传至与yashanDB同机后使用`imp`,减少网络延迟。 经验总结:优化`imp`工具,支持直接上传文件至服务器端执行,降低网络依赖。

热门文章

最新文章

下一篇
开通oss服务