探究-百万级别excel数据的导入导出
思路:
1.从数据库中读,分批次读取
2.多线程去写到一个excel中,
3.网页如何不卡界面的方式,下载文件
界面显示进度条,不影响主界面,下载完成,网站弹出小框口提示
百万级别数据导入导出如何优化?
excel导入导出;
痛点:
1.导入百万级别数据(excel)到DB,有哪些痛点?
1)一次加载百万级别数据到内存,发生OOM!
2)导入百万界别数据存储到DB如果循环一条一条插入,数据库链接不够用
2.导出百万级别数据(DB)到excel,有什么痛点呢?
1)一次性查询百万级别数据到内存,数据库查询超时
2)一次性加载百万级别数据到内存,发生OOM
3)百万级别数据导出到Excel,能写到一个sheet中?,能打开吗?不卡吗?
4)百万级别数据导出到excel中一行一行写入excel,频繁io操作,CPU飙高
3.业务操作高峰期,后台管理员频繁操作导入导出excel,系统很容易因为内存溢出挂掉!
如何解决这些痛点呢?
1.选用合适的excel开源处理框架 阿里的easyexcel
2.百万级别数据导入方案
逐行解析excel数据,分批读取excel数据到list,list达到一定数据量后持久化到DB,同时清空list列表数据
3.百万级别导出方案
分批分页查询DB数据到内存,比如一次查询5000条,分20次分批查询出来
每次加载指定大小的数据到内存,比如每次5000条,5000条批量写入到excel以后,清空当前list,释放内存;
分多个sheet写入,每个sheet比如放20w,100w数据放5个sheet;
每次从数据库批量读取指定大小的数据写入excel
4.解决高峰期导入导出资源瓶颈
从产品方面涉及的时候,引导产品,将导入导出功能设计成异步,尽量不要同步等待,虽然牺牲了一点体验,但是长期看对系统的稳定非常重要;
前端导入导出按钮操作的频率,比如10分钟内不能频繁导入导出
后端导入导出采用MQ异步排队处理,防止内存写爆,CPU打满
采用动态配置开关控制导入导出的数量,通过压测预估系统处理数据的阈值默认配置一个,导入导出超出阈值需要产品或运营发邮件申请,开发修改配置;
如果业务确实有超大数据量请求,超过阈值太多,引导产品或运营分批导入导出解决;
导入导出模块-》记录所有导入导出的进度;
思考:
1.用户操作导出功能,等待过程中,用户关闭了系统,服务器上,这个导出命令会怎么样?
2.