首页 > 数据库 > 数据库开发技术 > 关于数据事实表汇总的模拟实现——原理
原始数据因为存储了基本上原封不动的数据,导致系统存储压力增大,同时也造成查询使系统性能的下降;而轻度综合数据由于数据进行压缩更为简洁,通常情况下对数据仓库的访问95%以上都是通过轻度综合数据访问来进行的。
数据增量聚合的实现和增量抽取类似,都是尽量以时间戳的方式,尽量减少每次事务的开销。
下面开始对基于时间戳的数据增量聚合进行系统设计:
1、首先需要定义一张数据字典表,定义需要进行处理的任务,其中主要包括任务名称,任务描述,本次聚合开始时间、结束时间、当前时间、执行的系统时间,状态,最大时限等等。
|
序号 |
字段名称 |
字段描述 |
字段类型 |
备注 |
|
1 |
factProcName |
任务名称 |
Varchar(40) |
|
|
2 |
factDesc |
任务描述 |
Varchar(100) |
|
|
3 |
factType |
任务类型 |
INT |
|
|
4 |
LastLogTime |
当前处理时间 |
Datetime |
|
|
5 |
BeginTime |
本次任务开始时间 |
Datetime |
|
|
6 |
EndTime |
本次任务结束时间 |
Datetime |
|
|
7 |
Status |
本次任务执行情况 |
Varchar(20) |
FINSHED RUNNING EXCEPTION |
|
8 |
LogLimit |
本次任务处理最大时限 |
Int |
|
|
9 |
Step |
本次任务处理距离当前时间最大间隔 |
Int |
|
|
10 |
CancelFlag |
取消标志 |
Int |
1,取消 0,正常 |
|
11 |
CurTime |
本次任务执行的系统时间 |
Datetime |
|
|
1、获取上次处理的恶最后时间,状态和取消情况 2、如果取消状态,则直接退出 3、判断是否存在该任务 4、如果没有,则新增,如果存在更新当前状态为运行 5、获取本次任务开始时间和结束时间 6、并根据系统表中的最大处理时限和时间间隔进行截取时间 7、根据控制事务处理大小的粒度,进行循环抽取 8、 INSERT INTO t_fact_table(TargetFieldList) SELECT SourceFieldList FROM t_org_table WHERE logdate> BeginDate AND logdate< BeginDate+粒度 9、并同步进行时间和状态的更新 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8128313/viewspace-888914/ ,如需转载,请注明出处,否则将追究法律责任。