如何高效利用easyexcel实现百万条数据的导入导出?
- 内容介绍
- 文章标签
- 相关推荐
本文共计882个文字,预计阅读时间需要4分钟。
使用EasyExcel导入导出百万条数据思路分析:
1. 数据导入: - 使用EasyExcel的`ExcelReader`进行读取。 - 逐行读取,避免一次性加载过多数据到内存。 - 根据数据量适当调整读取速度和缓冲区大小。
2. 数据导出: - 使用`ExcelWriter`进行数据写入。 - 按批处理方式分批写入,减少内存消耗。 - 优化Excel文件格式,例如选择合适的单元格格式。
3. 数据格式处理: - 对数据长度进行限制,如每条数据不超过200个字符。 - 对文本数据进行截断或合并,确保不超过2字节。 - 对大数据量进行分块处理,每条数据对应400字节。
4. 内存优化: - 导入模块的JVM内存设置为8G,以适应大数据量处理。 - 使用缓冲机制,减少内存的直接访问。
5. 性能监控: - 监控导入导出过程中的内存和CPU使用情况。 - 及时调整配置参数,优化性能。
总结:通过合理配置EasyExcel模块的参数,采用分批处理和内存优化策略,可以有效地导入导出百万条数据。
easyexcel导入导出百万条数据思路分析
导入万条数据
一条数据200个字 一个文字2字节byte 一条数据相当于400byte 大约等于0.5kb
一万条数据大概5000kb 相当于5M
导入模块的jvm内存设置为8G
- 导入进行限制,系统只支持同时有200个人同时进行导入操作,通过redis进行记录,操作结束后对redis中值进行减1,同时对当前在线导入的数据量进行限制,只允许同时导入 100万条数据,通过redis记录,新建一条导入数据保存到数据库,同时发送一条mq消息给websocket,例如导入任务开始,此时消息会展示在界面上
- 通过导入传递的参数然后通过反射的方式去找到校验类和保存类
- 读取数据通过线程池进行多线程操作校验,校验时记录错误数据,如果出现失败存在一个list中,跳出保存,走上传错误文件逻辑,将错误原因记录在文件中
- 校验成功后在一个事务中分批次保存数据 单次保存500条,保存后将已保存的数据clear,方便垃圾回收,保存出现错误后回滚事务
- 如果出现需要远程调用feign的情况 增加seata 做控制
- 简单保存则直接在excel中引入需要保存的service与mapper
导出百万条数据
机器为16核 按照io操作
- 导出通过线程池控制,导出任务都放在线程池中运行,核心线程数设置为16,最大线程数设置为25,队列大小设置为30,导出时先判断队列是否已经满了,满了则直接提示错误,没满则新建一条导出数据保存到数据库,同时发送一条mq消息给websocket,例如导出任务开始,此时消息会展示在界面上
- 通过导出传递的参数反射获取查询的类,然后通过循环分页去查询结果,默认每次查询100条,可以自定义查询条数,将查询进度实时展示在界面上
- 每次查询后将结果写入excel中
本文共计882个文字,预计阅读时间需要4分钟。
使用EasyExcel导入导出百万条数据思路分析:
1. 数据导入: - 使用EasyExcel的`ExcelReader`进行读取。 - 逐行读取,避免一次性加载过多数据到内存。 - 根据数据量适当调整读取速度和缓冲区大小。
2. 数据导出: - 使用`ExcelWriter`进行数据写入。 - 按批处理方式分批写入,减少内存消耗。 - 优化Excel文件格式,例如选择合适的单元格格式。
3. 数据格式处理: - 对数据长度进行限制,如每条数据不超过200个字符。 - 对文本数据进行截断或合并,确保不超过2字节。 - 对大数据量进行分块处理,每条数据对应400字节。
4. 内存优化: - 导入模块的JVM内存设置为8G,以适应大数据量处理。 - 使用缓冲机制,减少内存的直接访问。
5. 性能监控: - 监控导入导出过程中的内存和CPU使用情况。 - 及时调整配置参数,优化性能。
总结:通过合理配置EasyExcel模块的参数,采用分批处理和内存优化策略,可以有效地导入导出百万条数据。
easyexcel导入导出百万条数据思路分析
导入万条数据
一条数据200个字 一个文字2字节byte 一条数据相当于400byte 大约等于0.5kb
一万条数据大概5000kb 相当于5M
导入模块的jvm内存设置为8G
- 导入进行限制,系统只支持同时有200个人同时进行导入操作,通过redis进行记录,操作结束后对redis中值进行减1,同时对当前在线导入的数据量进行限制,只允许同时导入 100万条数据,通过redis记录,新建一条导入数据保存到数据库,同时发送一条mq消息给websocket,例如导入任务开始,此时消息会展示在界面上
- 通过导入传递的参数然后通过反射的方式去找到校验类和保存类
- 读取数据通过线程池进行多线程操作校验,校验时记录错误数据,如果出现失败存在一个list中,跳出保存,走上传错误文件逻辑,将错误原因记录在文件中
- 校验成功后在一个事务中分批次保存数据 单次保存500条,保存后将已保存的数据clear,方便垃圾回收,保存出现错误后回滚事务
- 如果出现需要远程调用feign的情况 增加seata 做控制
- 简单保存则直接在excel中引入需要保存的service与mapper
导出百万条数据
机器为16核 按照io操作
- 导出通过线程池控制,导出任务都放在线程池中运行,核心线程数设置为16,最大线程数设置为25,队列大小设置为30,导出时先判断队列是否已经满了,满了则直接提示错误,没满则新建一条导出数据保存到数据库,同时发送一条mq消息给websocket,例如导出任务开始,此时消息会展示在界面上
- 通过导出传递的参数反射获取查询的类,然后通过循环分页去查询结果,默认每次查询100条,可以自定义查询条数,将查询进度实时展示在界面上
- 每次查询后将结果写入excel中

