浏览 3011 次
锁定老帖子 主题:请大家支招:关于大数据量的读取与处理
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-19
因为刚工作还不太满一年,经验不多尤其是对大数据量的经验更是不足,是否大家可指点? 目前我的做法是:通过一个sql取得放到一个Map或者DynaBean中,然后在界面显示,数据量在不到1w条记录的时候,web响应都需要2分钟左右的时间。 说到这里,我想介绍一下我的环境很是必要:单机(双CPU)单数据库(Firebird),应用程序和数据库都在同一台电脑上,系统开发采用的技术是Spring和Jdbc。 最近一直在寻找改进的方法,想到的调试sql语句本身的性能,比如采用p6spy进行监控,通过建立索引等调优; 另外也想到使用cache,但又对cache疑虑重重,比如cache的数据和database能否一致,从而让我的报表或者计算无误,外加没有cache的使用经验,不知道该注意的事项和如何着手。从长远看,如果cache用的比较糟糕,比如这也cache那也cache没有一个体系的规则,反而会影响了系统的维护性,给后期的开发以及他人造成严重的伤害。 其实,我说的数据量对很多人来说并不算很大,可是大家是怎么处理的呢? 当然,分页不是我要的功能,也对我的计算没有什么帮助,可以不讨论分页问题。 先谢谢大家 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-19
首先你要确认自己需求,是只有几个报表,年终看一下。还是平时就频繁进行数据分析。频繁进行数据分析你最好考虑数据仓库。采用专用的分析软件处理。
如果只是年终报表。那么你首先要尽量优化SQL,尽可能利用索引和视图等技术减轻数据库压力。 得到结果后,最好把报表缓存了。比如用OSCACHE把整个报表页面缓存了。如果是PDF的,那么就生成后让人直接下载。如果每次看报表都重新计算,再生成PDF,那当然太慢了。 |
|
返回顶楼 | |
发表时间:2008-04-19
可是如果不重新计算,缓存的报表页面 或者 提前生成的PDF
和真实数据库不是不一致了么? 万一客户就是根据报表进行分配一些资源或者任务,不即时生成能成么? 莫非你是说统计的信息,又不是具体的条目细节,少计算一点并没有关系? 如果是具体的条目信息呢?比如看当前的trade情况,和谁做的交易,价钱什么的。 |
|
返回顶楼 | |
发表时间:2008-04-19
无论如何,需求都有个时效性问题。你到底需要报表实时生成吗?而且如果你不是像监视器那样随时显示变化的话,只要你页面一出来,数据就是过时的。
所以你必须确定数据的时效到底需要多少。是否确实需要实时。你生成的报表只要写明是截至到一个日期为止的统计结果。我不信有人要实时反复生成报表。因为你每生成一次,那么生成的报表对于当前时间就是过期的。 如果你确实要实时刷新,那么你就不是要的报表,而是一个数据实时监视器。 |
|
返回顶楼 | |
发表时间:2008-04-20
谢谢 魔力猫咪
报表总有时间段的,怎么能知道你要生成全部 还是生成某个时间段的呢? 我说一下我的具体的应用场景: 1) PDF报表: 在得到每个报表之前,都有个选择时间段,选择观察FOB、CIF等交易类型的选择,如果不选直接确定就是全部显示,如果选择了,就按条件来。 针对这样的应用场景,应该是实时生成的。 2) Web统计:一个计划需要被分配到工厂去执行,进入分配界面的时候,会看到这个工厂下的若干统计数据,比如分配了多少,执行了多少,多少没有分配。。。。很多子条目的数据计算,同时又要显示多个工厂的 这个绝对是实时的。 针对这样的应用场景 |
|
返回顶楼 | |
发表时间:2008-04-20
异步吧,
大概流程这样 用户申请查看某报表,后台把这个任务放到一个队列异步执行, 系统界面告知用户接受该任务大概5分钟左右完成,此时用户可以做其它工作 生成报表后,系统短信给用户发个报表静态链接告知完成 |
|
返回顶楼 | |