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

news2024/12/23 9:33:19

问题现象

某客户环境,客户的业务使用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左右:

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

经验总结

客户端代码在yashandb运行的操作系统上执行,可以去除掉网络传输的影响,方便分析问题

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

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

相关文章

基于Springboot + Vue的宿舍管理系统

前言 文末获取源码数据库 感兴趣的可以先收藏起来&#xff0c;需要学编程的可以给我留言咨询&#xff0c;希望帮助更多的人 精彩专栏推荐订阅 不然下次找不到哟 Java精品毕设原创实战项目 作者的B站地址&#xff1a;程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csd…

idm下载速度只有1m IDM下载速度不稳定什么原因 idm下载速度慢解决办法

IDM能够集成到大多数流行的浏览器中&#xff0c;并提供一键下载功能&#xff0c;方便用户快速下载网页中的文件。今天&#xff0c;我们学习IDM下载速度只有1M&#xff0c; IDM下载速度不稳定什么原因的内容。 一、 IDM下载速度只有1M的原因 IDM&#xff08;Internet Download…

红酒与书籍:品味文字与酒香的双重享受

在静谧的夜晚&#xff0c;当一杯洒派红酒&#xff08;Bold & Generous&#xff09;与一本好书相遇&#xff0c;便是一场品味文字与酒香的双重享受。红酒的醇厚与书籍的深邃相互交织&#xff0c;带来的是一场心灵的盛宴&#xff0c;让人沉醉其中&#xff0c;忘却尘世的喧嚣。…

87. UE5 RPG 实现技能面板技能的升级降级功能

在上一篇文章里&#xff0c;我们实现技能面板里的技能按钮配置数据&#xff0c;在角色对应的等级后&#xff0c;会解锁对应的技能&#xff0c;并实现了监听玩家角色所拥有的技能点数。 在这一篇里&#xff0c;我们将实现&#xff0c;通过玩家所拥有的技能点数&#xff0c;对技能…

AI入门指南(二):算法、训练、模型、大模型是什么?

文章目录 一、前言二、算法是什么&#xff1f;概念实际应用 三、训练是什么&#xff1f;概念实际应用 四、模型是什么&#xff1f;概念实际应用小结 五、大模型是什么&#xff1f;概念模型和小模型有什么区别&#xff1f;大模型分类实际应用 六、总结七、参考资料 一、前言 人…

宠物空气净化器对浮毛有效果吗?宠物空气净化器十大排名使用体验

宠物空气净化器对浮毛有效果吗&#xff1f;宠物空气净化器能够通过过滤和吸附作用&#xff0c;减少室内空气中的浮毛。不过&#xff0c;随着宠物空气净化器市场的火爆&#xff0c;许多商家企图从中分一杯羹&#xff0c;为了快速的进入市场缺少产品的研发&#xff0c;导致市面上…

海南云亿商务咨询有限公司怎么样正规吗?

在这个日新月异的数字时代&#xff0c;电商行业正以前所未有的速度蓬勃发展&#xff0c;而抖音作为短视频与社交电商的完美融合体&#xff0c;更是开辟了一片充满无限可能的电商新蓝海。在这片浪潮中&#xff0c;海南云亿商务咨询有限公司凭借敏锐的市场洞察力和专业的服务能力…

docker部署datahub

快速安装&#xff0c;有网环境用&#xff0c;但是我没有用 pip3 install datahub datahub docker quickstart一、安装并启动datahub #python安装客户端 pip3 install datahub #导入镜像 (base) [rootb28-16p4p170-lijia lijia]# ls *.tar cp-kafka.tar datahub-ac…

【ARM】ARM Cortex 处理器详细讲解

目录 ARM Cortex处理器详细讲解1. Cortex-A系列1.1 概述1.2 架构和版本**ARMv7-A****ARMv8-A****ARMv9-A** 1.3 关键特性1.4 应用场景 2. Cortex-M系列2.1 概述2.2 架构和版本**ARMv6-M****ARMv7-M****ARMv8-M** 2.3 关键特性2.4 应用场景 3. Cortex-R系列3.1 概述3.2 架构和版…

SVM支持向量机(Support Vectors Mechine)

SVM支持向量机&#xff08;Support Vector Mechine&#xff09; SVM是一种监督学习算法&#xff0c;常用于解决二分类问题&#xff08;也可以解决多分类问题&#xff09;&#xff0c;它可以处理线性可分的数据&#xff0c;同时也可以处理线性不可分的数据&#xff0c;广泛应用…

力扣Hot100-230二叉搜索树中第K小的元素

&#xff08;一&#xff09;题目 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;…

人工智能系统测试的流程与生命周期

今天我们一起来看一下&#xff0c;人工智能系统究竟应该用什么样的流程和方法去进行测试呢&#xff1f; 首先我们一起来看一下&#xff0c;一个企业的人工智能产品部署和发布的一个流程&#xff0c;首先企业会从历史数据库中&#xff0c;利用数据去训练出一个初始的模型&#x…

【C++深度探索】红黑树实现Set与Map的封装

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目录…

Comfyui线稿转绘工作流 一键掉进彩色世界

前言 在数字艺术的世界里&#xff0c;线稿转绘无疑是将创意从简单的线条变成生动图画的关键一步。而在众多工具中&#xff0c;ComfyUI的线稿转绘工作流以其便捷和高效&#xff0c;赢得了众多艺术家的青睐。 本文将详细介绍ComfyUI线稿转绘工作流的应用场景和优势&#xff0c;…

C语言典型例题29

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.6 设圆半径r1.5&#xff0c;圆柱高h3&#xff0c;求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。 scanf输入结果&#xff0c;输出计算结果&#xff0c;输出时要有文字说明&#xff0c;取小数点后两位数…

优质电器/机械岗位推荐:经验不限大厂直招,薪资最高30K!

本周优质电器/机械岗位推荐&#xff0c;涵盖C、自动化、开发、安卓开发、项目管理等岗位&#xff0c;经验不限&#xff0c;更有大厂直招岗位&#xff0c;薪资最高30K&#xff01;&#xff01; 抓紧投递&#xff0c;早投早入职&#xff01; &#x1f447;点击职位名称查看详情…

数据结构(java实现)——优先级队列,堆

文章目录 优先级队列堆堆的概念堆的模拟实现创建堆入堆判满删除判空获取栈顶元素 创建堆两种方式的时间复杂度堆排序java提供的PriorityQueue类基本的属性关于PriorityQueue类的三个构造方法关于PriorityQueue类中&#xff0c;入堆方法是怎样实现的&#xff1f;PriorityQueue注…

基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 支持向量机&#xff08;SVM&#xff09; 4.2 GA-PSO-SVM算法 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) svm参数取值对检测性能的影响&#xff1a; SVM,PSO,…

华为Mate 60系列推送最新132版本有惊喜!你收到了吗?

华为Mate 60系列又悄悄搞事情&#xff0c;带了个大惊喜——手机获推HarmonyOS 4.2.0.132&#xff0c;一起来看看优化了什么&#xff1f; 首先更新的就是相机效果&#xff0c;从色彩精准度与拍照预览一致性上更加精益求精&#xff0c;上大分&#xff01; 色彩呈现更准确&#x…

基于Java中的SSM框架实现校园图书在线阅读系统项目【项目源码+论文说明】

基于Java中的SSM框架实现校园图书在线阅读系统演示 摘要 随着计算机的广泛应用和推广&#xff0c;越来越多的传统人工管理模式逐渐被线上化平台系统所替代&#xff0c;高校作为知识的学府在计算机的应用上非常广泛&#xff0c;同时随着近年来高校信息化建设的不断提升&#xf…