概述
粒度问题是设计数据仓库的一个最重要方面。粒度是指数据仓库的数据单位中保存数据的细化或综合程度的级别。细化程度越高,粒度级就越小;相反,细化程度越低,粒度级就越大。数据的粒度一直是一个设计问题。数据仓库环境中粒度之所以是主要的设计问题,是因为它深深地影响存放在数据仓库中的数据量的大小,同时影响数据仓库所能回答的查询类型。粒度的大小需要数据仓库在设计时在数据量大小与查询的详细程度之间作出权衡。
粒度的双重级别
很多时候,十分需要提高存储与访问数据的效率,以及非常详细地分析数据的能力。当一个企业或组织的数据仓库中拥有大量数据时,在数据仓库的细节部分考虑双重(或多重)粒度级是很有意义的。事实上,需要多个粒度级而不是一个粒度级的需求,是因为粒度级设计采用双重级别应该是几乎每个机构默认的选择。
下图表明了在数据仓库的细节级上的两种粒度级。
我们所称的双重粒度设计,在这个例中的数据仓库体现为两种类型数据:轻度综合数据和“真实档案”细节数据。数据仓库中的数据能回溯十年。从数据仓库中提取的数据是流向电话公司不同地区的“地区”数据,然后各地区独立地分析各自的数据。在个体级上进行各自的启发式分析处理。现在来回答两个问题,什么是轻度综合,什么是“真实档案”?
轻度综合
下图为轻度综合的实际例子
当数据从操作型环境(存储3 0天的数据)载入时,它就被顾客综合成可能用于DSS分析的数据域。J . J o n e s的记录显示她每月打电话的次数、每个电话的平均长度、长途电话的次数、接
线员帮助呼叫的次数,等等。在轻度综合数据库中的数据量比细节数据库中的数据量少得多。当然,在轻度综合级数据库中,对能访问的细节级存在一定的限制。
真实档案
数据仓库中数据的第二层—最低粒度级—存放在数据的真实档案层上,如下图所示
在数据的真实档案层上,存储的所有的细节来自于操作型环境。在这一层上确实有大量的数据。由于数据量太大,因此有必要将数据存放在如磁带这样的介质上。通过在数据仓库的细节级上创建两种粒度级,D S S设计者可一举两得。大部分DSS处理是针对被压缩的、存取效率高的轻度综合级数据进行的。如果什么时候需要分析更低的细节级( 5 %时间或更少的可能),可以到数据的真实档案层。在粒度真实档案层上,访问数据将是昂贵的、麻烦的和复杂的事情,但如果必须进入这一细节级也只得如此。
随着时间的迁移,如果需要开发某种搜索数据的真实档案级的模式,设计者可能要在轻度综合级上创建某些新数据域。
鉴于费用、效率、访问便利和能够回答任何可以回答的查询的能力,数据双重粒度级是大多数机构建造数据仓库细节级的最好选择。只有当一个机构的数据仓库环境中只有相对较少的数据时,才应尝试采用数据粒度的单一级别。
确定粒度级别
确定粒度级别开始时是需要一些常识和直觉的。在很低的细节级上建立轻度汇总的数据级是没有意义的,因为需要太多的资源来处理数据。而在太高的细节级上建立轻度汇总的数据级,则意味着许多分析必须在真实档案级上进行。因此确定轻度汇总的粒度级的第一件事是进行有根据的猜测。
但进行有根据的猜测也只是一个开端。还需要一定数量的反复分析来改进这个猜测。如下图所示,对于轻度汇总的数据为了确定合适的粒度级别,唯一可行的方法是将数据拿到最终用户的面前。只有当最终用户实际看到了数据之后,我们才能作出确定的回答。下图同时说明了我们所需做的反复的循环。
对于数据怎样轻度汇总是没有限制的(限制只存在于设计者的脑海里)。
有一点很重要,在典型的需求系统的开发中,在还不清楚大部分需求之前就忙于进行是不明智的。但在数据仓库的建造中,如果已知了至少一半的需求后,还不开始同样也是不明智的。换句话说,在建造数据仓库中,如果开发者想等着大多数需求明了后才开始工作,那么这个仓库是永远建不起来的。尽快启动与DSS分析员的反馈循环是非常重要的
提高粒度的方法
有好多方法用来提高数据的粒度,如以下所列:
当源数据置入数据仓库时,对它进行汇总。
当源数据置入数据仓库时,对它求平均或进行计算。
把最大/最小的设定值置入数据仓库。
只把显然需要的数据置入数据仓库。
用条件逻辑选取记录的一个子集置入数据仓库。
一个粒度的例子
下图为关于粒度划分的例子
根据上图提出了下面的问题:
“Cass Squire上星期是否给他在波士顿的女友打了电话?”
在 低粒度级上,这个问题是可以回答的,虽然这种回答将花费大量资源去查阅大量的记录,但是C a s s上周是否给他在波士顿的女友打了电话最终总是可以确定的。然而,在高粒度级上就无法明确地回答这个问题。假如在数据仓库中存放的只是 C a s s S q u i r e打的电话总数,那么就不能确定其中是否有一个电话是打往波士顿的。但是,在进行D S S处理时(这在数据仓库环境中是常见的),很少对单个事件进行检查。通常是针对某种数据集合进行处理的,这意味着要查阅大量记录。例如,假设提出下面的集 合性查询问题:“上个月人们从华盛顿打出的长途电话平均多少个?”在一个DSS环境中这种查询类型是非常常见的。当然,它既可以在高粒度级上也可以在低粒 度级上得到回答。但在回答这个问题时,在不同的粒度级上所使用的资源具有相当大的差异。在低粒度级上回答这个问题需要查询每一个记录,所以需要大量的资源 来回答这个问题。但在高粒度级上,数据进行了很大的压缩,而且能够提供一个答案。如果在高粒度级上包括了足够的细节,则使用高粒度级数据的效率将会高得 多。在设计和构造数据仓库之初就必须仔细考虑这种权衡。
分割问题
分割是数据仓库中数据的第二个主要的设计问题(在粒度问题之后)。数据分割是指把数据分散到各自的物理单元中去,它们能独立地处理。在数据仓库中,围绕分割问题的焦点不是该不该分割而是如何去分割的问题。
人们常说,如果粒度和分割都做得很好的话,则数据仓库设计和实现的几乎所有其他问题都容易解决。但是,假如粒度处理不当并且分割也没有认真地设计与实现,这将使其他方面的设计难以真正实现。
参考至:《建立数据仓库》W.H.Inmon著
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:[email protected]