【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左右:

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

相关文章
|
7月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
562 0
|
8月前
|
机器学习/深度学习 数据采集 传感器
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
263 0
|
7月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
8月前
|
存储 数据管理 数据库
数据字典是什么?和数据库、数据仓库有什么关系?
在数据处理中,你是否常困惑于字段含义、指标计算或数据来源?数据字典正是解答这些问题的关键工具,它清晰定义数据的名称、类型、来源、计算方式等,服务于开发者、分析师和数据管理者。本文详解数据字典的定义、组成及其与数据库、数据仓库的关系,助你夯实数据基础。
数据字典是什么?和数据库、数据仓库有什么关系?
|
7月前
|
人工智能 Java 关系型数据库
使用数据连接池进行数据库操作
使用数据连接池进行数据库操作
201 11
|
6月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
271 0
|
7月前
|
机器学习/深度学习 数据采集 运维
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
405 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
317 10

热门文章

最新文章

下一篇
开通oss服务