免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4639 | 回复: 19
打印 上一主题 下一主题

上百万条数据记录的报表统计问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-29 16:29 |只看该作者 |倒序浏览
经过一段时间的漂泊,终于找到了一份稳定的维护工作,现在的单位用的是informix数据库,接触的时间很短,遇到一个很棘手的问题,不知道各位大虾们是怎么解决,看看有什么好办法,先谢拉!
    单位想用asp和BS结构做一个报表统计的程序,本来想用3层结构来做,业务处理放服务器端数据库的存储过程里面,但这个想法被经理推翻了,她说她们以前也是这样,结果一运行就死机了,原因很简单,数据量太大了,估计有100万条,而且还有很多关联的表。
    数据库的状况是:一个生产用库,这个是肯定不能动的,另一个是备份库,每天定时备份,我能操作的就是备份库。
    以前老员工的办法就是在本地建库,然后在备份库空闲的时候把需要的数据提前处理好,也就是说不是等客户点击查询的时候才查,而是先处理好,毕竟报表的格式内容相对固定,这样查的时候就快了,理论是这样,也没有人试过,我也只是勉强能理解说的意思。
    不知道大家有什么好的办法,谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-04-29 16:58 |只看该作者
上百万的数据仅仅是小量数据,上千万甚至上亿的数据可能才算多。
估计你的数据结构设计或者是程序写的算法不够优化,或者表的索引建立的不合理。
或者你的服务器是奔腾一代100MhzCPU+16M内存+504M的老硬盘?

论坛徽章:
0
3 [报告]
发表于 2006-04-29 17:45 |只看该作者
是啊,机器配置应该说一下.

论坛徽章:
0
4 [报告]
发表于 2006-04-30 01:52 |只看该作者
机子的配置是很好的,看了一下,P4的CUP,IBM的服务器,内存1G,硬盘也有几百G,性能很不错的。楼上的朋友能不能就数据结构设计或者是程序写的算法不够优化,或者表的索引建立的不合理这三方面详细介绍一下,我没有接触过大型的数据库,最后有例子,我这几天也一直在看这方面的资料
    而且另一个问题也比较麻烦,怎么用Windows XP下的ASP联Unix下的informix数据库,以前都是在2000或XP下操作的,跨平台的还真没接触过。请多多指点。

论坛徽章:
0
5 [报告]
发表于 2006-04-30 01:59 |只看该作者
我现在就要在本地建一个库,然后通过各种各样的查询生成各种报表,那么我这个体系结构应该怎么设计呢,这个大方向我一直还没有头绪,哪位有经验的朋友可以指点一下,介绍个可行的解决方案,各种限制条件我都介绍了。

论坛徽章:
0
6 [报告]
发表于 2006-04-30 08:07 |只看该作者
有这方面经验的朋友,如果有时间,也愿意指导一下我这个新手,请留下QQ号,非常感谢
  本人QQ 453844671

论坛徽章:
0
7 [报告]
发表于 2006-04-30 09:16 |只看该作者

回复 6楼 lb_20016 的帖子

1、先设计好报表的展示结构。
2、根据展示结构,设计数据库表,让数据库表的结构尽量与展示报表一致。
3、针对每一个数据库表写esql程序,从数据库的基础数据表中提取数据,并插入。

好处:

1、减少前端查询使用复杂的关联语句,可以直接使用select.
2、报表的展示数据,实在非业务时间生成的,不会有太大性能影响.

缺点:

1、因为要新建数据库表来存储展示数据,所以浪费空间。
2、由于展示报表的结构不同,所以对应的esql程序可能很多。

论坛徽章:
0
8 [报告]
发表于 2006-04-30 10:15 |只看该作者
ahkai (呵呵),能否留QQ,耽误一点你的时间,具体指教一下

论坛徽章:
0
9 [报告]
发表于 2006-04-30 10:34 |只看该作者
看了ahkai 的方法,深受启发,非常感谢!
   关于这个方法,还有几点疑惑:
   1、比如我要做一个年终的统计,需要用到每天的数据,我生成了一个表专门存这里边的数据,那么这个数据应该是每天等生产数据库空闲,比如凌晨的时候就读过来,而且是每天都读的吧?这个esql是不是也要设置成每天某一时间自动执行?
   2、如何监控每天的数据是否传回本地,数据是否完整?是不是需要把传送情况写进文本文件每天查看?我只想到这个方法。不知道大家是怎么做的?
   3、还有就是问了一些用了一段时间informix的朋友,他们都说informix在Unix下是没有图形操作界面的,都是字符命令的界面,不知道是不是真的?

论坛徽章:
0
10 [报告]
发表于 2006-04-30 11:14 |只看该作者

回复 9楼 lb_20016 的帖子

抱歉,我没有QQ,很落伍哈^-^.

1、每天的抽取程序是定时执行的,需要一个crontab定时。原数据库和目标库的数据同步应该在esql的抽取程序前运行。
2、写在一个crontab shell里,可以保证数据库同步完成后,执行报表数据抽取。
3、没有图形界面。

在报表设计时,应将数据库表设计成当日表和历史表两种,每天先将昨天的日表迁移到历史表里再抽取组合当天的数据。这样可以缩小每日报表的处理时间和数据库的同步时间。(只处理和同步当天的数据)

在前端访问当天的报表时,当天的数据也会快。

[ 本帖最后由 ahkai 于 2006-4-30 11:16 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP