前一段时间,应朋友之邀帮助分析了一智能交通管理系统运营一段时间以后,查询报表速度慢得要命问题;简单交流以后,初步了解问题症结,一、业务数据更新量大,公交车每次进站,出站都要向系统提交运营数据,差不多一天下来就要有几十万条新数据产生;二、系统在采集处理,数据字典拆分的过细,这样一来每次涉及统计查询都得五六个表关联才能产生真正的业务逻辑数据出来。

    针对上述情况,根据以往经验,我提供了两个解决方案:一、针对业务数据量大的情况,设计一张大表,在行方向按最小业务数据单位做汇总,比如说一行记录为A车,在列方向依次统计耗油量、里程数、月份等,sql sever 或Oracle都可增加到千列,可以随意逻辑字段;相应也带来一个问题,这么长列冗余的表数据怎么算,同时怎么使用? 实话说,这样的数据是需要按时间维度来定期算的,计算出来结果就成为这一时间周期的静态数据快照。在使用时,还需按行逻辑,对列方向的数据做求和等一类汇总计算;短期来看,这样的数据是列冗余,长期来说,这样的数据就成为行冗余;二、数据字典拆分过细,统计查询困难怎么办;在业务数据表,增加数据字典值类型字段,这就取数据时就避免了表关联操作;同时对于数据采集并没有影响,数据字典拆分越细,采集到数据也就越准确。

    以上借数据表里行冗余和列冗余解决报表数据加载过慢问题,其实谈的是法不是术,具体应用时,还要灵活优化。

posted on 2010-12-21 22:45  baibo  阅读(282)  评论(0编辑  收藏  举报