强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan

项目距离上线的日期越来越近了,需要规范一下数据库中的数据,就需要从前端页面上导入系统数据到mysql数据库。导入3万数据,期间会有校验,最后分别插入到四张表中,本库插入3张表,云平台插入一张表,运行到一半的时候就前端页面假死了,最后通过分批插入数据解决问题,以下是实验并解决的过程。

1.实验条件

笔记本型号:戴尔,I3处理器,12G内存条

2.项目框架

本项目为前后端分离。

前端:Angular

后端:SSM+Dubbo+Mysql数据库

3.实验过程

插入数据库的是批量的插入,最后的sql语句类似于insert into t_test (cloumn_a,cloumn_b) values(1,2),(3,4),(5,6).

①一次性批量插入数据库(四张表)

结果:dubbo超时,由于中间需要有其他的操作,例如,学号重复的校验,身份证号的校验等,导致还没有到插入数据库的一步就已经dubbo超时了,我们设置的dubbo超时时间是3s.

②一次性批量插入数据库(单表插入)

我们将dubbo超时时间设置到保证不会超时,如10min,mysql报错,意思为传输的数据包太大了,超过了数据库配置的可接收的最大值.

使用命令连接mysql,使用命令查看mysql的配置:show VARIABLES like '%max_allowed_packet%';发现太小,然后设置的大一点,设置为20M,set global max_allowed_packet = 2*1024*1024*10

将学号重复的校验去掉,其中会为每条数据设置UUID(业务需要),测试数据量是3W,结果是可以入库,数据量大小是4.8min左右.

③公共方法tool中分批次1000一批次(单表插入)

我们将dubbo超时时间设置到保证不会超时,如10min,将学号重复的校验去掉,其中会为每条数据设置UUID(业务需要),测试数据量是3W,结果是可以入库,数据量大小是4min左右.

④除去入库和和学号校验,基础代码循环设置uuid

        结果:1min

⑤除去学号校验,入库4张表,基础代码循环设置uuid

dubbo报错,dubbo不支持这么大的数据包

4.解决方法

在自己业务处理的代码中同样分批处理,分批处理的代码如下:

private static int batchCount=500; //500条数据一批次
@Override@Transactional(rollbackFor = Exception.class)public int insertAll(List<T> records) {int result = 0;if (records != null) {int recCount = records.size();if (recCount > 0 && recCount <= batchCount) {for (T record : records) {wrapBaseEntity(record);}result = getRealDao().insertAll(records);}if (recCount > batchCount) {int times = recCount / batchCount;int residue = recCount % batchCount;if (residue > 0) {times = times + 1;}for (int i = 0; i < times; i++) {if (i == times - 1) {for (T record : records.subList(batchCount * i, recCount)) {wrapBaseEntity(record);}result = result + getRealDao().insertAll(records.subList(batchCount * i, recCount));} else {for (T record : records.subList(batchCount * i, batchCount * (i + 1))) {wrapBaseEntity(record);}result = result + getRealDao().insertAll(records.subList(batchCount * i, batchCount * (i + 1)));}}}}return result;}

5.总结

在这个实验过程中有两个因素,一:mysql可接收的最大包限制,二:dubbo的rpc传输允许的最大包限制,解决掉以上两个因素之后,分批次的执行时间和部分批次的执行时间是差不多的,为了节省带宽,提高效率,我们在业务处理和公共方法中都采用小批量入库方式,将大数据量分段处理。到目前为止,数据是可以正常入库了,但是性能上不如人意,需要尝试多线程实验,达到更高效的结果。

分批次插入mysql:一次性插入mysql两万以上数据造成数据库假死相关推荐

  1. MySQL一次查几万条数据,【mysql】一次插入几万条数据应该怎么做优化

    刚刚去面试,面试官提问了我一次插入几万条数据有什么优化方法,一次更新几万条数据有什么优化方法,这些我之前都没有用过,希望大家给我解一下惑. 回答 1.insert批量执行,禁止单条insert val ...

  2. mysql截取点前面两位的字符串_数据库截取前两位小数点

    Oracle的函数 函数对字段进行处理: 一.字符函数 lower(char):将字符串转换为小写的格式 upper(char):将字符串转换为大写的格式 length(char):返回字符串的长度 ...

  3. mysql 单表2000多万条数据,模糊查询如何秒回

    mysql 单表数据2000多万,没有分区.没有表.没有分库,表存储的是企业信息,例如:企业名称.经营范围.注册地址等信息.现在需要通过关键词模糊匹配企业名称,搜索出匹配的数据.因为模糊匹配,所以直接 ...

  4. 两万条数据需要做个数据图_第3关:基于Excel对电商母婴数据进行分析

    对于新手,拿到数据往往不知如何下手.那就按图索骥,依照以下五部一步步来 step1:明确问题 目标必须明确,基于当前业务出发.如一千个读者有一千个哈姆雷特一样,数据可以被解读出不同样子,必须集中目标, ...

  5. mysql插10万条数据_MySQL数据库插入100w条数据要花多久?

    MySQL数据库插入100w条数据要花多久? 1.多线程插入(单表) 2.多线程插入(多表) 3.预处理SQL 4.多值插入SQL 5.事务(N条提交一次) # 多线程插入(单表) 问:为何对同一个表 ...

  6. 利用python+scrapy+mysql爬取虎扑NBA球员数据存入数据库

      大家好,这是我的第一篇博客,写的不好请见谅. 小编是个多年的NBA观众,最近正值季后赛的比赛,闲来无事,突发奇想,想利用刚刚所学的python著名爬虫框架scrapy采集一下全NBA的球员基本信息 ...

  7. mysql导入格式化数据_mysql将格式化文本数据导入数据库

    前提:文本数据必须是式化好的,比如下式 张三|1988.2.3|湖北武汉|武汉大学 李四 |990.5.6|湖南湘潭|湖南大学 王五|1991.6.12|北京|北京理工大学 第1字段 张三 第 2 字 ...

  8. 存到mysql的中文乱码_web项目存数据到数据库,中文乱码,解决过程

    first: 排查原因: 打断点,查看到底是在执行存数据库操作之前就已经乱码了,还是存数据库操作后乱码的. 前者解决方案: 在web.xml里面加上: encodingFilter org.sprin ...

  9. MYSQL - 算一算1000万条数据大概占了多大磁盘空间

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u010235716/article/d ...

最新文章

  1. P1339 热浪 最短路径模板题
  2. cpp 条件判断 大于等于_第31p,if条件语句,请满足我的要求
  3. linux中统计java数量,linux 统计当前目录下文件数
  4. 网页转图片 java_java-网页转图片
  5. CozyRSS开发记录8-解析一份RSS
  6. Python 第三方库之 Celery 分布式任务队列
  7. mysql注入***扫描备忘;
  8. 【渝粤教育】国家开放大学2018年秋季 2711T花卉栽培技术 参考试题
  9. 通过域名地址加载eot|otf|ttf|woff|svg等报404 错误问题
  10. Magick.NET图片处理:解决png转jpg背景色为黑色的问题(设置背景色)
  11. 去年我国出生率跌破1%,有什么影响?
  12. 航天环宇提交招股书上会稿:计划募资6亿元,控股股东为李完小
  13. Windows RPC 初体验
  14. Win10缺失.Net处理方案汇总
  15. set up ovn development env (by quqi99)
  16. 如何快速实现在网页中调用文档扫描仪 (2)
  17. python的星号(*)和双星号(**)运算符的使用
  18. java setter和getter_Java Getter和Setter
  19. IEC61131, IEC61499图形可视化,PLC图形可视化,PLC组态源代码2018
  20. 深入Java虚拟机之 --- JVM的爱恨情仇

热门文章

  1. Hadoop笔记02-Hadoop-HDFS
  2. 2021-11-05 奈氏准则,香农定理(考研中的第一波知识点)
  3. 【java】查重类的实现
  4. JavaScript给按钮绑定点击事件(onclick)的方法及js常见事件
  5. 使用rdbtools工具分析redis备份RDB文件
  6. 【2018焦作-E】Resistors in Parallel(思维+大数)
  7. Python被编进小学教材了?啥时纳入高考……
  8. MATLAB画图中图形对象、文字标注、希腊字母显示等
  9. php pdo 事物类,一个基于PDO的数据库操作类(新) 一个PDO事务实例
  10. Docker操作镜像源