在BI项目实施中,不可避免会遇到处理链的设计问题,基于智扬信达超过14年的BI实施经验,总结出来如下经验,供学习参考。本文摘录自智扬信达出版的国内第一本SAP BW 4/HANA专著《SAP BW/4HANA 实战指南》。
在对数据调度进行设计时,应关注主数据与业务数据的顺序、规避数据调用的死循环、兼顾并发限制3个核心要点。
1.主数据与业务数据的顺序
在主数据与业务数据的顺序方面,应坚持主数据优先原则。在设置顺序之前,需要先理解主数据和业务数据的含义及其关系。
(1)主数据。主数据具有相对稳定性、唯一性、有限性、自带属性的特点。“稳定”表示一旦初始化之后,数据内容在一定时间范围内变化较小;“唯一”表示数据的内容在各种应用场景下保持一致,例如公司代码,采购员下单时选择的公司代码与财务人员进行结算时所选的是同一套公司代码信息;“有限”表示信息量不会无止尽地增加下去,数据条目数较少,数据结构相对简单;“自带属性”是客观世界对该主数据维度的一种描述,比如SKU的规格、描述等。
(2)业务数据。相对于主数据,业务数据具有不确定性、随机性、无限性等特点。“不确定”表示的是数据内容的不确定,数据内容随着业务发展情况进行增长或更新;“随机”表示数据条目内容根据实际业务的发生而变化,没有统一的规律可循;“无限”表示理论上信息量的增长无止尽,数据条目可能是几百、几万乃至几亿的量级,数据结构相对复杂。
在分析系统中,业务数据往往与主数据分离存储。出于跨领域、跨主题数据分析和去异构的目的,各业务数据表需要读取主数据对象的信息。因此,基于业务数据和主数据的特征,一般建议在进行业务数据调度之前完成主数据对象的数据加载,即遵从主数据优先原则。
2.规避数据调用的死循环
死循环,顾名思义就是单独依靠自身控制无法终止,由某两个或多个程序相互依赖,有始无终,导致链路执行中断无法继续的一种状态。一般情况下,在调度时出现死循环往往会导致系统资源的无效占用而影响正常进程的执行,从而导致数据流处理错误。在实际的数据仓库系统中,表现为多个表在后台日志中被锁定。出现这种情况,可能有如下三方面原因。
(1)时间安排不合理。通常在多个调度的情况下,作业计划时间安排容易出现冲突,容易出现前序调度未完成,后续调度已启动的情况。
(2)并行调度存在相互依赖。在调度中设置了并行的作业,但是并行执行的调度相互之间存在读取关系,出现双方互相等待锁定的情况。实际上,处理A进行数据写入过程的前提是处理B数据处理结束,而处理B进行数据写入过程的前提是处理A数据处理结束。
(3)自己调用自己。部分表写入、读取同时调度。
一般建议调度的对象按照数据存储层级梳理作业调度的先后次序及执行时间,对于存在强依赖性的调度,通过合并为一个调度实现确定的先后次序。对于不存在强依赖性的调度,采取并行或先后的方式设置调度。为了规避数据调用的死循环,要坚持自下而上、分层调用原则。
3.兼顾并发限制
处理链设计需兼顾并发限制,以系统资源限制为前提。对于系统的数据调度,在不考虑系统资源限制的情况下,同时并发数越高,调度可以在越短的时间内完成,对于满足数据调度要求越有利。但是大部分的系统资源都不可能没有限制,而系统的调度往往是一系列后台任务,自身执行需要系统资源(包括CPU、内存、进程等)达到一定要求,才能实现调度。因此,调度设计者需要考虑并发限制。在实际数仓系统实施过程中,若出现如下几种情况,还需考虑调整调度并发数:
(1)后台调度任务失败,提示内存不足;
(2)前端执行调度时,提示无法执行的错误;
(3)CPU或内存在一定期间内占用率高居不下,一旦结束部分调度则恢复正常。