`
hnylj
  • 浏览: 209770 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

这种场景使用物化视图会不会更好?

阅读更多

 

在一个真实的项目中有这样一个问题,问题描述如下:

有一张订单表,里面的数据量非常庞大,而我们也没有对该表经行其他处理,有新的数据入库都会插入到该表中,随着时间的推移,这张表的数据还将不断地增加,且日增数据很大,我们现在要处理的问题是,从该订单表中统计出销售报表数据。其实这个需求并不复杂,我们要解决的问题是,大数据量的性能问题。

 

关于这个问题,开发出的第一个版本是直接通过SQL查询来处理的,结果发现并不复杂的SQL报表统计查询语句,其响应的时间较长,结果后来项目组决定采用每天晚上用job跑出数据,将跑出来的数据插入到另一个统计表中,然后报表数据从该统计表中查询。这个方案解决了查询响应时间较长的问题,但是用户却不能看到实时的销售报表情况,只能查看昨天及昨天之前的销售报表数据,后来项目组决定又做了一个今日销售报表的功能,于是提供了今日销售报表和历史销售报表,至此解决了这个问题。

 

我后来回想这个问题,感觉还是很繁琐,一方面我需要创建一个Job,一方面我要新建一张统计表,一方面我要新增一个今日销售报表的功能来满足用户去查看今日销售情况,而且今日销售报表还是从订单表中查询,性能也会有问题。

 

于是我的想法是:针对报表统计的SQL创建一个物化视图,让它来帮助我们预先计算并保存报表统计的结果,也就是说,我们把销售报表统计工作交给物化视图来处理,我们只需从该物化视图中查询结果即可,这样我们要处理的问题就得到了大大的简化。

 

通过物化视图,我只需定义刷新的模式,它帮助我们实时生成物理的报表数据,我们从物化视图中查询结果显示给用户,这样我们完全可以得到实时的销售报表统计数据,这种解决方案虽然牺牲了空间,但换来了时间,

 

大家觉得这种解决方案怎么样呢?

 

 一个Java技术交流群,一起交流,共同进步,扣扣群号:513086638

 

 

分享到:
评论
1 楼 hnylj 2010-08-17  

竟然没有发布到论坛上,郁闷。

相关推荐

Global site tag (gtag.js) - Google Analytics