对大数据的批量导入MySQL数据库

server/2024/9/25 21:27:53/

自己的库里有索引在用insert导入数据时会变慢很多

  使用事务+批量导入

    可以配置使用spring+mybatis整合的方式关闭自动提交事务(地址),选择批量导入每一百条导入使用list存储值传入到mybatis中

      http://x125858805.iteye.com/blog/2369243

          list.add(bill); //自己选择插入对象if(list.size()==1000) {Result<Integer> num = billCheckService.batchInsert(list); //将会调用下面的配置文件countnum+=num.getData();for(int i = 0; i < num.getData();i++) {countmoney+=list.get(i).getPayAmount();}list.clear(); }
<insert id="batchInsert" parameterType="java.util.List" >insert into t_pay_bill_file_detail (file_id,pay_order_no,third_trade_no)values<foreach collection="list" item="item" index="index" separator=",">(#{item.fileId},#{item.payOrderNo},#{item.thirdTradeNo})</foreach></insert>

或者使用原始的jdbc关闭事务进行批量提交

conn.setAutoCommit(false); //一句话就可以啦

          ps.addBatch();if(list.size()==1000) {int[] num = ps.executeBatch();conn.commit();}

前两个自己试验的时候大概花的时间都一样,自己又试验了一个按文件处理的语句进行jdbc插入,是最快的方式了,可以在SQL后面制定插入固定字段的值,前提是文件的顺序必须是一样的,注意事项:

character set utf8 --------这里是utf8不是utf-8;
fields terminated by ','----文件中每个字段是按‘,’分割的,如.csv文件
lines terminated by '\\n'---每行代表一个记录;
        Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://192.168.2.18:3306/fi?characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false",username,password);reader = new BufferedReader(new InputStreamReader(file.getInputStream())); //因为自己是从前端传进来一个file(MultipartFile类型)file1=File.createTempFile("gjy",".txt",new File("E:"));  //E:后面不用写//来代表在盘符下,SQL会默认缺省的,不然添加后报错String sql = "load data local infile "+'"'+ file1.getAbsolutePath()+'"' +" into table t_pay_bill_file_detailcopy character set utf8 fields terminated by ',' "+ "lines terminated by '\\n' "+ "(`file_id`,`trans_type`,`pay_channel_id`,`pay_order_no`,`third_trade_no`,`trans_date`,`pay_amount`) ";ps = conn.prepareStatement(sql);ps.execute();file1.deleteOnExit(); //程序退出时删除临时文件

这个方式虽然快是快,但是对文件的要求太高,客户不可能对程序理解,只知道传进来文件,所以自己取到file对象都会对file进行按行读取并进行判断重写写入临时文件

这就又有个问题,读取写入需要花费太多时间,因为自己需要各种业务逻辑进行处理。目前正在努力解决中,如果大家有什么好的方法可以提出来一下!


http://www.ppmy.cn/server/49324.html

相关文章

Apache网页优化

一、网页压缩与缓存 1.1网页压缩 网站访问速度影响因素&#xff1a;应用程序响应速度、网络带宽、服务器性能、与客户端之间网络传输速度等。其中最重要的是一个因素是Apache本身&#xff0c;因此提升Apache执行速度&#xff08;使用网页压缩&#xff09;是性价比最高的选择。…

C | 在ubuntu22下开发的一些配置

目录 VScode设置 要下载的插件&#xff1a; 卸载VScode的话就是哪装的哪删。 浅用gcc 预处理指令 使用gcc 语言编译过程 1. 预处理&#xff08;Preprocessing&#xff09; 2. 编译&#xff08;Compilation&#xff09; 3. 汇编&#xff08;Assembly&#xff09; 4. …

Element-UI - 解决el-table中图片悬浮被遮挡问题

在开发中&#xff0c;发现element-ui在el-table中添加图片悬浮显示时&#xff0c;会被单元格遮挡的问题。通过查询得到的解决办法&#xff0c;大多是修改.el-table类中相关样式属性&#xff0c;但经过验证发现会影响到其他正常功能的使用。对于此问题解决其实也并不难&#xff…

存储器的性能指标以及层次化存储器

存储器的性能指标 存储器有三个性能指标&#xff1a;速度、容量和位价&#xff08;每位价格&#xff09; 1.存储速度 &#xff08;1&#xff09;存取时间 想衡量存储速度&#xff0c;最直观的指标就是完成一次存储器读写操作所需要的时间&#xff0c;这叫做存取时间&#x…

从局部到全局:产品开发视角的转变与系统优化策略

一、研发背景 在科技产品开发领域&#xff0c;每一种产品都存在着多元化的开发方案可供选择&#xff0c;这要求开发者不断拓展视野&#xff0c;进行横向对比学习&#xff0c;以期找到最贴合市场需求、最具竞争优势的解决方案。以往&#xff0c;我们的研发团队一直立足于稳固而…

.net8 blazor auto模式很爽(五)读取sqlite并显示(2)

在BlazorApp1增加文件夹data&#xff0c;里面增加类dbcont using SharedLibrary.Models; using System.Collections.Generic; using Microsoft.EntityFrameworkCore;namespace BlazorApp1.data {public class dbcont : DbContext{public dbcont(DbContextOptions<dbcont>…

手机照片免费数据恢复软件EasyRecovery2024免费版下载

大家好&#xff01;今天我要给大家推荐一款非常棒的软件——EasyRecovery。相信大家都知道&#xff0c;电脑中的重要文件一旦丢失&#xff0c;对我们的工作和学习都会产生很大的影响。 而EasyRecovery软件就是专门解决这个问题的利器&#xff01;它能够帮助我们快速、有效地恢…

Shell中[ ],[[ ]]的区别

在Shell编程中&#xff0c;[ ] 和 [[ ]] 是两种常用的条件测试结构&#xff0c;用于在脚本中执行逻辑判断。尽管它们看起来相似&#xff0c;但功能和使用场景却有显著差异。理解这两者的区别及其应用场景&#xff0c;对于编写高效、健壮的Shell脚本至关重要。本文将详细介绍 [ …