最近有个项目,需要处理大量数据生成excel?
- 数据量
50多个字段, 20万条记录 (从数据库读取)
5个字段左右, 50万条记录 (从数据库读取)
2. 测试
从两个方面,一个是生成速度,一个cpu/内存占用
测试平台 linux,机器配置8核cpu 32g内存 centos7.x
速度: golang -> java -> .net core -> php
20W数据
- golang 生成在2分钟左右,程序业务逻辑没有开启协程, cpu占用300%,内存占用8g+, golang有多核处理,限制使用1核cpu, 时间也在2分钟左右, cpu占用100%,内存占用8g+ 使用excel库 http://github.com/tealeg/xlsx
- java 生成在2分钟左右, 程序本身没开线程, cpu占用100%, 内存占用,4g+,根据机器内存情况,jvm需要调整内存。
- .net core 生成在10分钟左右,程序本身没开task,cpu占用100%或低于,内存占用 2g+ 使用库epplus
- php 生成在80分钟+, 顺序处理。 cpu占用100%, 内存占用10g+,使用类库phpexcel
3.分析结果!
如果在机器性能强劲, 非docker等情况下资源充足的情况下, golang/java的选择都可以。golang 非常优秀。
- 速度 java > golang > .net core > php
- 内存占用 .net core < java < golang < php
- 文件大小 php < golang < dotnet < java
如果资源紧张,或docker情况下,推荐使用.net core 处理excel,时间稍微长一点点,但对资源占用控制非常不错。
php应该没有可比性了,数据量小的可以使用。
代码地址
wayhood/exportExcelTest