easyexcel导入导出百万条数据思路分析

简介: easyexcel导入导出百万条数据思路分析

easyexcel导入导出百万条数据思路分析

导入万条数据

一条数据200个字 一个文字2字节byte 一条数据相当于400byte 大约等于0.5kb

一万条数据大概5000kb 相当于5M

导入模块的jvm内存设置为8G

  1. 导入进行限制,系统只支持同时有200个人同时进行导入操作,通过redis进行记录,操作结束后对redis中值进行减1,同时对当前在线导入的数据量进行限制,只允许同时导入 100万条数据,通过redis记录,新建一条导入数据保存到数据库,同时发送一条mq消息给websocket,例如导入任务开始,此时消息会展示在界面上

  2. 通过导入传递的参数然后通过反射的方式去找到校验类和保存类

  3. 读取数据通过线程池进行多线程操作校验,校验时记录错误数据,如果出现失败存在一个list中,跳出保存,走上传错误文件逻辑,将错误原因记录在文件中

  4. 校验成功后在一个事务中分批次保存数据 单次保存500条,保存后将已保存的数据clear,方便垃圾回收,保存出现错误后回滚事务

  5. 如果出现需要远程调用feign的情况 增加seata 做控制

  6. 简单保存则直接在excel中引入需要保存的service与mapper

导出百万条数据

机器为16核 按照io操作

  1. 导出通过线程池控制,导出任务都放在线程池中运行,核心线程数设置为16,最大线程数设置为25,队列大小设置为30,导出时先判断队列是否已经满了,满了则直接提示错误,没满则新建一条导出数据保存到数据库,同时发送一条mq消息给websocket,例如导出任务开始,此时消息会展示在界面上

  2. 通过导出传递的参数反射获取查询的类,然后通过循环分页去查询结果,默认每次查询100条,可以自定义查询条数,将查询进度实时展示在界面上

  3. 每次查询后将结果写入excel中

目录
相关文章
|
数据挖掘
HiChIP 数据分析: 过滤及Peak Calling
HiChIP 数据分析: 过滤及Peak Calling
|
SQL Java 数据库连接
sql语句能查询出来,mybatis未查询出结果问题解决
sql语句能查询出来,mybatis未查询出结果问题解决
1568 0
|
安全 Java 数据库连接
【springMvc】自定义注解的使用方式
【springMvc】自定义注解的使用方式
444 0
|
监控 Ubuntu Docker
如何在Docker容器启动时自动运行脚本
【8月更文挑战第13天】在Docker容器启动时自动运行脚本可通过以下方式实现:1) 使用`ENTRYPOINT`或`CMD`指令在Dockerfile中直接指定启动脚本,如`ENTRYPOINT ["/startup.sh"]`;2) 启动容器时通过`--entrypoint`参数指定脚本路径;3) 利用supervisor等进程管理工具自动启动与监控脚本,确保其稳定运行。确保脚本具有执行权限并正确设置依赖资源路径。
4076 1
|
网络协议 网络性能优化 数据中心
什么是显式拥塞通知ECN?
【4月更文挑战第23天】
1933 0
什么是显式拥塞通知ECN?
|
Ubuntu
蓝易云 - Ubuntu20.04安装软件报错:The following packages have unmet dependencies
如果以上步骤都不能解决问题,可能需要手动查找并安装缺失的依赖软件包。你可以通过运行 `sudo apt-cache search <package-name>`来搜索软件包,然后使用 `sudo apt install <package-name>`进行安装。
1085 2
|
数据采集 机器学习/深度学习 数据挖掘
使用Python进行数据预处理与清洗的最佳实践
本文探讨了Python在数据预处理和清洗中的关键作用。预处理包括数据收集、整合、探索、转换和标准化,而清洗则涉及缺失值、重复值、异常值的处理及数据格式转换。文中提供了使用pandas库进行数据读取、缺失值(如用平均值填充)和重复值处理、异常值检测(如IQR法则)以及数据转换(如min-max缩放)的代码示例。此外,还讲解了文本数据清洗的基本步骤,包括去除标点、转换为小写和停用词移除。整体上,文章旨在帮助读者掌握数据预处理和清洗的最佳实践,以提高数据分析的准确性和效率。
2468 2
|
前端开发 JavaScript Java
Spring Boot中使用拦截器
本节主要介绍了 Spring Boot 中拦截器的使用,从拦截器的创建、配置,到拦截器对静态资源的影响,都做了详细的分析。Spring Boot 2.0 之后拦截器的配置支持两种方式,可以根据实际情况选择不同的配置方式。最后结合实际中的使用,举了两个常用的场景,希望读者能够认真消化,掌握拦截器的使用。
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
1747 0
|
监控 安全 调度
【虚拟化】系统虚拟化的主要功能和分类
【虚拟化】系统虚拟化的主要功能和分类
1375 0