论坛首页 Java企业应用论坛

请大家支招:关于大数据量的读取与处理

浏览 3014 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-19  
大数据量,比如上万条记录甚至几十万条数据的报表(PDF形式) 或者 经过分组求和和一定的条件过滤得到的汇总数据报表(Web形式),会造成等待时间过长,甚至CPU占用超级高的现象。

因为刚工作还不太满一年,经验不多尤其是对大数据量的经验更是不足,是否大家可指点?

目前我的做法是:通过一个sql取得放到一个Map或者DynaBean中,然后在界面显示,数据量在不到1w条记录的时候,web响应都需要2分钟左右的时间。

说到这里,我想介绍一下我的环境很是必要:单机(双CPU)单数据库(Firebird),应用程序和数据库都在同一台电脑上,系统开发采用的技术是Spring和Jdbc。

最近一直在寻找改进的方法,想到的调试sql语句本身的性能,比如采用p6spy进行监控,通过建立索引等调优;
另外也想到使用cache,但又对cache疑虑重重,比如cache的数据和database能否一致,从而让我的报表或者计算无误,外加没有cache的使用经验,不知道该注意的事项和如何着手。从长远看,如果cache用的比较糟糕,比如这也cache那也cache没有一个体系的规则,反而会影响了系统的维护性,给后期的开发以及他人造成严重的伤害。

其实,我说的数据量对很多人来说并不算很大,可是大家是怎么处理的呢?
当然,分页不是我要的功能,也对我的计算没有什么帮助,可以不讨论分页问题。

先谢谢大家
   发表时间:2008-04-19  
首先你要确认自己需求,是只有几个报表,年终看一下。还是平时就频繁进行数据分析。频繁进行数据分析你最好考虑数据仓库。采用专用的分析软件处理。
如果只是年终报表。那么你首先要尽量优化SQL,尽可能利用索引和视图等技术减轻数据库压力。
得到结果后,最好把报表缓存了。比如用OSCACHE把整个报表页面缓存了。如果是PDF的,那么就生成后让人直接下载。如果每次看报表都重新计算,再生成PDF,那当然太慢了。
0 请登录后投票
   发表时间:2008-04-19  
可是如果不重新计算,缓存的报表页面 或者 提前生成的PDF
和真实数据库不是不一致了么?
万一客户就是根据报表进行分配一些资源或者任务,不即时生成能成么?


莫非你是说统计的信息,又不是具体的条目细节,少计算一点并没有关系?

如果是具体的条目信息呢?比如看当前的trade情况,和谁做的交易,价钱什么的。
0 请登录后投票
   发表时间:2008-04-19  
无论如何,需求都有个时效性问题。你到底需要报表实时生成吗?而且如果你不是像监视器那样随时显示变化的话,只要你页面一出来,数据就是过时的。
所以你必须确定数据的时效到底需要多少。是否确实需要实时。你生成的报表只要写明是截至到一个日期为止的统计结果。我不信有人要实时反复生成报表。因为你每生成一次,那么生成的报表对于当前时间就是过期的。
如果你确实要实时刷新,那么你就不是要的报表,而是一个数据实时监视器。
0 请登录后投票
   发表时间:2008-04-20  
谢谢 魔力猫咪

报表总有时间段的,怎么能知道你要生成全部 还是生成某个时间段的呢?


我说一下我的具体的应用场景:
1) PDF报表: 在得到每个报表之前,都有个选择时间段,选择观察FOB、CIF等交易类型的选择,如果不选直接确定就是全部显示,如果选择了,就按条件来。
   针对这样的应用场景,应该是实时生成的。

2) Web统计:一个计划需要被分配到工厂去执行,进入分配界面的时候,会看到这个工厂下的若干统计数据,比如分配了多少,执行了多少,多少没有分配。。。。很多子条目的数据计算,同时又要显示多个工厂的
   这个绝对是实时的。

针对这样的应用场景
0 请登录后投票
   发表时间:2008-04-20  
异步吧,
大概流程这样
用户申请查看某报表,后台把这个任务放到一个队列异步执行,
系统界面告知用户接受该任务大概5分钟左右完成,此时用户可以做其它工作
生成报表后,系统短信给用户发个报表静态链接告知完成
0 请登录后投票
论坛首页 Java企业应用版

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