马府强
e602926c55
|
1 year ago | |
---|---|---|
.. | ||
src | 1 year ago | |
ExportExcelData.iml | 1 year ago | |
README.md | 1 year ago | |
pom.xml | 1 year ago |
README.md
多线程实现百万级数据导出到excel
考虑前提:
大数据量导出到文件,首先需要考虑的是内存溢出的场景:数据库读取数据到内存中、将数据写入到excel进行大量的IO操作。然后考虑到一个文件数据过大,用户打开慢,体验不好。针对这些问题的考虑,采用多线程的方式多个线程同时处理查询数据,一个线程生成一个excel,最后在合并数据返回,以达到提高效率的目的。
实现思路:
1.使用easyExecl结合批量线程池执行,结合线程分批处理数据缩短查询数据库时间和导出数据时间,查询数据速度比较理想 测试接口:http://localhost:8080/exportEasyExcel?pageNum=0&pageSize=100000&limit=4000 2.使用easyExecl结合循环线程池执行,结合线程分批处理数据缩短查询数据库时间和导出数据时间,查询数据速度不理想 测试接口:http://localhost:8080/exportEasyExcelV1?pageNum=0&pageSize=60000&limit=2000 3.使用SXSSFWorkbook结合批量线程池执行,结合线程分批处理数据缩短查询数据库时间和导出数据时间,效果最优最理想 http://localhost:8080/exportEasyExcelV4?pageNum=0&pageSize=30000&limit=2000
模拟sql可以结合测试类本地造数据:
CREATE TABLE user
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
name
varchar(255) DEFAULT NULL,
phone
varchar(255) DEFAULT NULL,
ceate_by
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
remark
varchar(255) DEFAULT NULL,
birthday
datetime DEFAULT NULL,
test1
varchar(255) DEFAULT NULL,
test2
varchar(255) DEFAULT NULL,
test3
varchar(255) DEFAULT NULL,
test4
varchar(255) DEFAULT NULL,
test5
varchar(255) DEFAULT NULL,
test6
varchar(255) DEFAULT NULL,
test7
varchar(255) DEFAULT NULL,
test8
varchar(255) DEFAULT NULL,
test9
varchar(255) DEFAULT NULL,
test10
varchar(255) DEFAULT NULL,
test11
varchar(255) DEFAULT NULL,
test12
varchar(255) DEFAULT NULL,
test13
varchar(255) DEFAULT NULL,
test14
varchar(255) DEFAULT NULL,
test15
varchar(255) DEFAULT NULL,
test16
varchar(255) DEFAULT NULL,
test17
varchar(255) DEFAULT NULL,
test18
varchar(255) DEFAULT NULL,
test19
varchar(255) DEFAULT NULL,
test20
varchar(255) DEFAULT NULL,
test21
varchar(255) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=600001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;