现在的位置: 首页 > 综合 > 正文

增量处理解决方案

2013年06月29日 ⁄ 综合 ⁄ 共 879字 ⁄ 字号 评论关闭
 

增量处理解决方案

问题归纳:

如果定时对Cube进行完全处理,数据量少还没有问题,但是如果数据多的话,时间开销将会非常厉害。如果改由按年或者月份分区处理的话稍微可以缓解处理压力,但是如果对于实时性要求比较高的系统来说,完全处理分区的开销也不小,因此建议采用分区增量处理的方式。由于SSAS自带的分区增量处理有许多问题,因此必须寻找一个较可行的解决方案来处理这类问题。

方案提出:

按照年份或者月份自动建立对应的度量值分区,根据对应的时间自动处理相应的时间分区,方式是对数据进行增量处理。

处理方式:

在每年的第一天或者是每个月的第一天,通过JOB自动建立对应的分区,详细建分区XMLA语句如下:

具体代码参照Create new Partition.xml文件

ssis的包里,用Analysis Services Execute DDL Task方式来处理对于的时间分区,具体的的XMLA语句如下:

具体代码参照Process by Partition.xml文件

但是这样用ssis自己提供的增量处理方式,会使每次处理的数据都几何倍数的增长,效率很低。

因此必须想出一个比较可行的处理方案来对每次增加的数据进行处理。参照最传统的数据仓库原则,有两种方式,一种是对数据的时间来进行判断,另一种是对新进入数据库的字段加一个默认的未处理字段,然后处理的时候对这个字段进行判断。

权衡两种算法,第一种的做法要对时间进行判断,效率不如只对一个简单的tinyint类型字段进行判断来得快,因此采用对原有数据表增加一个字段来进行这类数据的判断,这个字段的默认值是0。在处理的时候加一个判断条件is_process=0来处理那些增量的数据,然后再处理完成后做一个UPDATE的工作,把数据表中所有is_process=0的记录都更新成处理完状态。

具体处理代码参照Process by Query.xml文件

实施效果:

对一个有2500多万数据的分区进行完全处理,实际的处理时间为16分钟左右

实行增量处理,一次插入的数据为350万左右,实际的处理时间为8分钟左右

预计以后随着数据量的增长,增量处理的优势将会更加明显

抱歉!评论已关闭.