商务智能系统性能研究
来源:软件导刊 更新时间:2014-08-19

 
阐述了商务智能的基本概念, 分析了影响商务智能系统性能的关键因素, 提出提高商务智能系统性能的解决方案。
前言
    随着对各种业务支撑系统以及信息系统应用的不断深入, 企业累积了大量的数据。如何从这些数据中获取对企业竞争和发展有着关键作用的各种信息和知识变得尤为重要, 因此商务智能(Business Intelligence)应运而生。商务智能系统目前已经得到很多企业的重视并被逐步应用。商务智能分析的基础是企业长期运营所积累的大量数据, 这些数据来自不同的生产系统或者业务支撑系统, 一般都有异构、数据量大、数据质量较差等特点, 因此我们又不得不面临一个严峻的问题, 那就是如何提升利用这些数据进行分析决策的商务智能系统的性能。
1 商务智能概述
    商务智能是对商业数据的采集、管理、分析得出所需信息并最终用信息指导决策的过程。其目的是使企业的决策者能更方便地通过商务智能系统从大量的数据中获取信息和知识, 以便作出更恰当的决策。商务智能又被称为第三代商业信息系统, 因为以前的生产系统、业务支撑系统的核心是联机事务处理(OLTP), 而商务智能的核心则在于联机分析处理(OLAP) 。商务智能系统一般有数据仓库( 或数据集市) 、ETL 过程、OLAP 分析模型、数据挖掘模型以及前端分析展现工具等几个核心模块。从目前国内的应用来看, 其中对商务智能系统性能影响较大的主要是数据仓库( 或数据集市) 、ETL 过程、OLAP分析模型。
1.1 数据仓库简述
    数据仓库是建设商务智能系统的基础, 通过数据仓库, 商务智能可以截取或载入大量原始信息, 归并各种不同来源的、异构的数据源的数据, 用于支持企业管理和商业决策。数据仓库具有以下特性:
    (1) 数据仓库是面向主题的、集成的、稳定的和随时间不断变化的数据集合。
    (2)数据仓库又是以关系数据库、并行处理和分布式技术为基础的。
    (3)数据仓库具有丰富的数据采集、数据管理、数据分析和信息描述能力。依据所管理数据的类型及所解决问题的范围, 数据仓库可分为企业数据仓库、操作型数据存储、数据集市等三种类型。企业数据仓库包含当前、历史及综合的数据, 用于企业级的决策分析; 而数据集市是数据仓库的一种具体化, 通常面对的是企业中一个部门或者某一专门的主题;操作型数据存储指数据 ETL 过程中的临时过渡区, 其仅包含当前、细节和轻度综合的数据。
1.2 ETL 过程简述
    ETL 是数据的提取、转换和加载(Extract, Transform and loading) 的过程, 旨在从多个数据源( 可以包括生产系统和业务支撑系统的关系数据库、文本、HTML 数据、XML数据等) 及时提取业务数据并进行清理转换, 然后集成这些数据, 并将它们载入数据仓库数据库中, 为数据分析做好准备。ETL 过程中的主要处理包括抽取、验证、清洗、转换、聚集、加载。
(1) 抽取:数据提取是捕获源数据的过程, 主要有完全刷新和增量更新两种捕获数据的方法;
(2) 验证:域检查和外键检查等;
(3) 清洗:数据清理是清理有效数据,使之更精确更有意义的过程;
(4) 转换:主要包括从数据源的数据合并、域转换和同步、数据类型和格式的转换、用于不同目标表的数据分离;
(5) 聚集:数据聚集是收集并以总结行式表达信息的过程;
(6) 加载:数据移至中心数据仓库中的目标表通常是 ETL 过程的最后步骤。
    1.3 OLAP 模型简述
    OLAP 模型是进行数据分析以及建立数据挖掘模型的基础。OLAP 的基本思想是, 根据数据仓库中的主题确定一组我们关心的业务指标, 这些指标在 OLAP 模型中叫度量值; 确定与这些指标相关联的在数据分析时会被关心分析角度, OLAP 模型中叫做维度。在此基础上在维度中的各个层次上对指标值进行预先的聚合等预处理以便提高查询时的响应速度。OLAP模型的核心是度量值和维, 通过对多维数据的钻取、切片及旋转等分析动作, 来完成对不同度量值在不同层次上的查询分析。
2 影响商务智能系统性能的关键因素
    根据项目实施经验, 数据仓库的设计会直接影响 ETL 过程的性能和 OLAP 模型性能, 因此设计具有良好结构的数据仓库则成为商务智能系统性能的基础。商务智能系统上线运行过程中, ETL 过程所耗费的时间一般在整个系统中会占用相当多的时间, 因此提升 ETL 性能是整个系统性能提升的关键之一, OLAP 模型则是后面的数据分析和数据挖掘的基础, 因此OLAP 模型对查询分析的响应速度也显得尤为重要。如何建立合理的 OLAP 模型,或者说如何优化 OLAP 模型的性能则成为整个商务智能系统性能提升的又一关键。
    2.1 数据仓库设计中的关键因素
    (1) 索引的使用。从严格意义上说, 数据仓库仍然是一种关系数据库, 因此与在任何关系数据库中一样, 索引对数据仓库的性能具有重要作用。
    (2) 设计怎样的数据表才能装载数据量庞大的数据和承载大量数据的插入、删除、修改、查询对系统带来的压力。这是因为商务智能系统中的数据来源一般来说数据量会比较大, 且会定期的产生大量的数据, 需要对表进行大量的插入、修改操作, 同时, 商务智能系统中, 对数据表的查询也是非常频繁的, 特别是作为事实表的数据。
    (3) 各种键的数据类型的选择。维度表和事实表以及各种中间临时表的键的数据类型直接影响 ETL 和 OLAP 的性能。
    2.2 ETL 过程设计中的关键因素
    (1) 由于 目 前 大部分 ETL 工具采用程序转换和 SQL 视图转换相结合的方式,选择合理的转换方式可对性能有较大的提升。
    (2)ETL 过程中各个活动的执行顺序、并行性等也对性能提升有关键性的作用。
    2.3 OLAP 模型设计中的关键因素
    (1) 维度的结构模型设计会直接影响整个 OLAP 模型的预处理以及对查询的响应速度。
    (2)CUBE 分区的设计, 当数据量过大或者使用多台服务作 OLAP Server 要实现各服务器的负载均衡时, 必须考虑 CUBE分区。优良的分区设计是 CUBE 性能的关键之一。
    (3)CUBE 中计算成员的设计。

3 提升商务智能系统性能的解决方案
    基于对影响商务智能系统性能的关键因素的分析, 就可针对性地提出相应的解决方案。
    3.1 提升数据仓库性能解决方案
    (1) 在数据仓库设计中使用索引, 每个维度表都必须在主键上建立索引。事实数据表必须在由维度表外键构成的组合主键上建立索引。在其它列( 如标识层次结构级别的列) 上, 索引对某些专用查询的性能也很有用。由于星型架构和雪花型架构很简单, 大多数数据仓库应用程序所需的索引主要就是这些。对于特殊查询和创建报表, 则可能需要其它索引。为了配合 ETL 中大量数据的载入, 聚集索引的取舍则主要取决于对数据载入性能和数据查询的性能的综合评估。
    (2) 对数据量较大的表例如某些事实表则尽可能对表进行分区。所谓分区是指将表分成多个较小的表( 称为成员表) , 每一个成员表与原始表有相同的格式, 但仅包含原始表中的部分行。也可将每一个表放在不同的资源( 文件或服务器) 上, 以使处理负荷分散到多个资源上。分区后每个分区表数据量相对较小, 可提升数据载入、修改、查询过程的性能; 分区也对 OLAP 模型中的 CUBE 分区起到较好的作用。
    (3) 每个维度表的主键应尽可能的设计为数值类型, 一般是整型。相应的事实表由维度表外键构成的主键也尽可能的设计为整型。
    3.2 提升 ETL 过程性能的解决方案
    (1) 正因为大部分 ETL 工具采用程序转换和 SQL 视图转换相结合的方式, 且部分 ETL 工具在程序转换上提供了相当强大的功能, 因此转换方式的选择显得相当重要。一般来说, 数据域转换和同步、数据类型和格式的转换、用于不同目标表的数据分离等操作, 采用程序转换可实现较SQL 视图转换更优越的性能; 数据源的连接、合并等操作则应选择 SQL 视图转换。
    (2)一般的 ETL 工具中 ETL 流程的各个活动是串行的, 并没有自动对流程中的各个活动的并行执行进行专门优化的机制。那么同一时刻 ETL 流程中只有某一个活动在执行, 而其余的活动必须等待其上一个活动执行完毕方可开始执行。为了提高一个 ETL 流程中各个活动的并行性, 可在 ETL 流程执行前, 对各个活动进行时间代价估算, 按一定规则对 ETL 流程中各个活动的输人水平分割成相等大小的多个水平裂片, 使后一个活动的执行不须等前一活动的所有数据完全处理结束才能执行, 只须前一活动的部分数据裂片到达即可开始执行, 从而减少各个阶段的空闲等待时间, 来加快响应时间, 实现 ETL 流程中各个活动的并行流水执行。
    3.3 提升 OLAP 模型的解决方案
    (1)在设计 OLAP 的维度的过程中, 有多种维度结构包括星型结构、雪花结构、父子维度、虚拟维度等。一般情况下星型结构会相对雪花结构的性能高; 虚拟维度会相对普通星型结构性能高。因此在维度设计过程中, 应在能满足需求的前提下尽可能使用恰当的维度。
    (2) 多维数据集分区允许多维数据集的源数据和聚合数据分布在多台服务器中。多维数据集中的每个分区都可以有不同的数据源。一般分区建立有两种方式,一是来自同一事实表, 按切片分区; 一是来自不同事实表的数据可按表源实现分区。当数据量较大时对 CUBE 分区, 使得每次处理可只处理当前的分区和需要更新的分区, 而不必每次都完整处理整个多维数据集, 实现增量更新。然而, 当多个分区存在时, 查询则需对各个分区的聚合数据进行进一步聚合, 这会影响查询响应速度, 因此为了提高查询响应速度必须预先对不再更新的分区进行合并。还需要注意的是在建立分区时应保证各个将来可能合并的分区使用相同的聚合以便合并。
    (3) 为了避免因为计算成员而影响整个多维数据集性能, 应注意建立计算成员时 MDX 函数和表达式的选择, 例如 FIL-TER函数对性能的影响是较大的, 应慎重使用。
4 结束语
    在当今社会, 信息化程度越来越高,竞争日益激烈, 企业会越来越多地使用商务智能系统, 这也对商务智能系统的性能提出了更高的要求。实际实施过程中, 影响商务智能系统性能的因素是多方面的,例如硬件因素、数据质量、系统本身的设计等。从商务智能系统的核心模块的设计角度出发研究影响系统性能的关键因素和相应解决方案, 对商务智能系统项目的实施人员和实施过程有不可忽视的作用。