You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
马府强 0e5002ca7c 导出 2 years ago
..
src 导出 2 years ago
ExportExcelData.iml 导出 2 years ago
README.md 导出 2 years ago
pom.xml 导出 2 years 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;