百万级数据读写Excle

Excel 2003及以下的版本。一张表最大支持65536行数据,256列。也就是说excel2003完全不可能满足百万数据导出的需求。Excel 2007-2010版本一张表最大支持1048576行,16384

目前读写Excle常用JAVA技术分为POIJXLFASTEXCLE。相比其它两种技术,POI支持公式、宏以及格式设置,效率高。

    对于大数据量的写入,POI在最新的版本中引入了sxssf,支持对大数据量的写操作。在创建SXSSFWorkbook对象时,需要设置一个窗口大小,sxssf也就是通过将大数据量先写到本地磁盘,在通过读取本地磁盘数据,根据设置的窗口大小,多次将数据写入Excle。这个窗口大小对写Excle的性能有较大影响。官网提供的demohttp://poi.apache.org/spreadsheet/how-to.html#sxssf 

对于大数据量的读取,POI没有提供相关读取接口,但是Excle2007创建的Excle文件内部实际是通过XML形式组织起来的。有兴趣的TX可以将Excle文件的扩展名修改为.ZIP,载解压看看该Excle文件的数据保存形式。通过流的方式对大数据量Excle文件的读取,可以大大缩短读取数据的时间。


下面附上测试的时间指标以及源码。

测试环境

内存:4G

CPU4

 

写入excle指标对比(每行30个单元格,写入1000以内随机数,单个sheet页)

数据量(条)

CPU(峰值)

内存(GB

写入磁盘耗时(s

写入Excle耗时(s

总耗时(s

文件大小

500

30%

2.81

0.719

0.234

0.953

75KB

1000

32%

2.81

0.719

0.281

1

147KB

5000

32%

2.85

0.968

0.438

1.406

717KB

1

32%

2.86

1.219

0.64

1.859

1.43MB

5

34%

2.86

3.172

2.610

5.782

7.13MB

10

30%

2.86

5.610

5.656

11.266

14.2MB

50

30%

2.87

30.741

25.258

55.999

71.4MB

100

32%

2.87

57.938

131.813

189.751

143.1MB

 

读取excle指标对比(每行30个单元格,写入1000以内的随机数,10sheet页)

数据量(条)

CPU(峰值)

内存(GB

写入磁盘耗时(s

写入Excle耗时(s

总耗时(s

文件大小

500

29%

2.81

0.734

0.281

1.015

80KB

1000

30%

2.81

0.734

0.328

1.062

151KB

5000

33%

2.85

0.813

0.640

1.435

724KB

1

31%

2.86

0.937

1.078

2.015

1.43MB

5

34%

2.92

2.827

3.546

6.373

7.14MB

10

33%

2.94

5.457

5.159

10.616

14.2MB

50

30%

2.93

23.618

24.524

48.142

71.2MB

100

32%

2.97

47.782

96.834

144.616

142.41MB

 

工程中需要通过maven导入xercesImplpoi-ooxml两个Jar包。

工程源码在我的CSDN资源中。地址:http://download.csdn.net/detail/jisuanjihongming/9768848


你可能感兴趣的:(Java,百万级数据读写Excle)