lapam2 / ExportExcelData

多线程实现百万级数据导出到excel

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

多线程实现百万级数据导出到excel

考虑前提:

大数据量导出到文件,首先需要考虑的是内存溢出的场景:数据库读取数据到内存中、将数据写入到excel进行大量的IO操作。然后考虑到一个文件数据过大,用户打开慢,体验不好。针对这些问题的考虑,采用多线程的方式多个线程同时处理查询数据,一个线程生成一个excel,最后在合并数据返回,以达到提高效率的目的。

实现思路:

  1. 计算导出数据的总条数:dataTotalCount
  2. 合理设置每个excel的数据的数量(避免打开一个excel时间过长):LIMIT
  3. 计算出需要导出的excel个数(线程个数):count=dataTotalCount/ LIMIT + (dataTotalCount% LIMIT > 0 ? 1 : 0)
  4. 将分页、生成文件路径信息,初始化到一个队列里面,队列的大小是线程的数量,对每个文件开启一个线程,异步执行导出,文件全部导出结束,此时异步转成同步,将最终生成的excel文件生成zip压缩包。

About

多线程实现百万级数据导出到excel


Languages

Language:Java 100.0%