论坛首页 Java企业应用论坛

java大数据量导出

浏览 19856 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-08-07  
想请问下 各位大侠....

   几百万的数据 怎么导入Excel.... 怎么都说的这么容易...
0 请登录后投票
   发表时间:2011-08-07  
1.每个处理环节的时间打出来看看。因为数据量大,如果循环100W ,每次1ms,那么总的时间是 100w*1ms/(1000*60)= 16.xx 大概要16分钟;

2.对于这种需求,可以和客户商量,把即时导出,改为任务的方式;即:用户点击导出之后,将导出的执行语句写入后台,后台另外线程处理,处理成功之后,可以通知用户下载。

3.导出 cvs 也可以,cvs也可以用excel打开的啊

4.最终用户需要的应该不是几百万的数据,一般的用户,你给他这么大的数据量,他也没用。应该还有一些过滤条件的,可能是隐藏的,请在了解、分析用户的需求;

5.如果确实是需要几百万的数据,估计也是个别用户特别需要的,可以为他们另外解决处理方案,例如 操作系统级脚本定时导出之类的。
0 请登录后投票
   发表时间:2011-08-08  
yugenning 写道
1.每个处理环节的时间打出来看看。因为数据量大,如果循环100W ,每次1ms,那么总的时间是 100w*1ms/(1000*60)= 16.xx 大概要16分钟;

2.对于这种需求,可以和客户商量,把即时导出,改为任务的方式;即:用户点击导出之后,将导出的执行语句写入后台,后台另外线程处理,处理成功之后,可以通知用户下载。

3.导出 cvs 也可以,cvs也可以用excel打开的啊

4.最终用户需要的应该不是几百万的数据,一般的用户,你给他这么大的数据量,他也没用。应该还有一些过滤条件的,可能是隐藏的,请在了解、分析用户的需求;

5.如果确实是需要几百万的数据,估计也是个别用户特别需要的,可以为他们另外解决处理方案,例如 操作系统级脚本定时导出之类的。


+1,这些方案都是很好的选择。

还是搞定这些蛋疼的客户为主吧。
0 请登录后投票
   发表时间:2011-08-08  
之前我也遇到过,为这样的需求头疼
0 请登录后投票
   发表时间:2011-08-08  
yugenning 写道
1.每个处理环节的时间打出来看看。因为数据量大,如果循环100W ,每次1ms,那么总的时间是 100w*1ms/(1000*60)= 16.xx 大概要16分钟;

2.对于这种需求,可以和客户商量,把即时导出,改为任务的方式;即:用户点击导出之后,将导出的执行语句写入后台,后台另外线程处理,处理成功之后,可以通知用户下载。

3.导出 cvs 也可以,cvs也可以用excel打开的啊

4.最终用户需要的应该不是几百万的数据,一般的用户,你给他这么大的数据量,他也没用。应该还有一些过滤条件的,可能是隐藏的,请在了解、分析用户的需求;

5.如果确实是需要几百万的数据,估计也是个别用户特别需要的,可以为他们另外解决处理方案,例如 操作系统级脚本定时导出之类的。


基本同意,主要还是得挖掘客户的真正需求是什么,百万级的数据,客户拿到有什么用呢?光看也得看一段时间了,如果是要分析,那就筛选之后再给客户。如果仅仅是个数据备份,就异步导出数据好了。
0 请登录后投票
   发表时间:2011-08-08  
同事曾写过海量数据导出的Excel 的工具 并且就在javeEye 里
0 请登录后投票
   发表时间:2011-08-08  
可以这样做,写个脚本直接用数据库的导出功能,然后在程序中调用本地脚本,我公司里有个项目就是这样做的,不过速度还是挺慢的,先存ftp,然后把导出地址提供给客户
0 请登录后投票
   发表时间:2011-08-08  
想快的话就多线程分部分导出,格式为CSV格式(在windows上CSV文件是默认用Excel打开的)
0 请登录后投票
   发表时间:2011-08-08  
本人遇见过需要一次导出十多万的数据的要求,希望处理成:
1)使用jxl导出
2)分50000条导出一个sheet

结果是悲剧,原因如下:
1)jxl暂不支持Excel2007只到2003版的,故每个sheet只支持65536行记录,这样看来5w一个sheet应该是可以的
2)jxl这个开源包,只在worksheet的close时刷到文件,结果还没到2w就内存溢出了,加大启动内存,搞定一个sheet,结果第2个sheet一样溢出了。改进一下刷出数量,每个sheet降到2w,但还是在几个sheet后溢出了,所以发现用jxl包,它的对象总是在内存里,直到close后,才释放,所以你想,十多万的数据都放在内存里,能不完蛋吗?
3)又想了一招,jxl它不是一个worksheet管理所有对象吗?我就做多个worksheet,多个xls文件不行吗?最后再打个zip包给用户也算是个交待。结果另人沮丧,又遇见了溢出,断点每个创建worksheet的地方,发现,上个worksheet用完close正常,但气人的是内存还是这么大,没还回去,这样再创建,当然会溢出了,不知道是JVM偷懒还是jxl里按静态玩的?
4)把内存开大,要求客户至少加些条件,把总数降一下,总算在开发环境上试着用多文件打包方式搞定了,放在AIX上一测试,又悲剧了,windows上没溢出,AIX上同样内存启动,万把的就爆了,看来不同操作系统之间效果是截然不同的,哎。
5)最终,由经理强势搞定客户一定要进行条件过滤,最后不管查询出多少,最多只导出固定记录数(这个数测试了,不会溢出的),惨通的经历。

以上经历仅供参考。

  
0 请登录后投票
   发表时间:2011-08-08   最后修改:2011-08-08
gj_gp 写道
本人遇见过需要一次导出十多万的数据的要求,希望处理成:
1)使用jxl导出
2)分50000条导出一个sheet

结果是悲剧,原因如下:
1)jxl暂不支持Excel2007只到2003版的,故每个sheet只支持65536行记录,这样看来5w一个sheet应该是可以的
2)jxl这个开源包,只在worksheet的close时刷到文件,结果还没到2w就内存溢出了,加大启动内存,搞定一个sheet,结果第2个sheet一样溢出了。改进一下刷出数量,每个sheet降到2w,但还是在几个sheet后溢出了,所以发现用jxl包,它的对象总是在内存里,直到close后,才释放,所以你想,十多万的数据都放在内存里,能不完蛋吗?
3)又想了一招,jxl它不是一个worksheet管理所有对象吗?我就做多个worksheet,多个xls文件不行吗?最后再打个zip包给用户也算是个交待。结果另人沮丧,又遇见了溢出,断点每个创建worksheet的地方,发现,上个worksheet用完close正常,但气人的是内存还是这么大,没还回去,这样再创建,当然会溢出了,不知道是JVM偷懒还是jxl里按静态玩的?
4)把内存开大,要求客户至少加些条件,把总数降一下,总算在开发环境上试着用多文件打包方式搞定了,放在AIX上一测试,又悲剧了,windows上没溢出,AIX上同样内存启动,万把的就爆了,看来不同操作系统之间效果是截然不同的,哎。
5)最终,由经理强势搞定客户一定要进行条件过滤,最后不管查询出多少,最多只导出固定记录数(这个数测试了,不会溢出的),惨通的经历。

以上经历仅供参考。

  


一般outputsteam 都有flush() 方法,你为什么不用,而只用close呢,


每个sheet只支持65536行记录,分成两个sheet 不久可以搞定100000条数据了吗。

十万条数据就要给客户做工作,我觉得这是软件开发人员的耻辱。

百万条绝对不是计算机的极限,而是挑战开发人员的极限。

注:我现在遇到的系统每天有5~6 billion条记录的数据数据要吃进去,然后还要处理后,将结果feed下游系统。







0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics