无为

无为则可为,无为则至深!

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
设想一下, 如果我们的业务处理是在几个传统的在线处理(OLTP)系统上运作, 鋅哐舖6|  
例如这些系统保存有我们的顾客资料、产品资料以及顾客购买记录等。
鷀嫠嫠9?  
当业务主管需要对顾客行为或产品进行分析时, 信息部门是否觉得特别为难,
轝嫑x切&?  
此时,需要将各个系统数据按统一格式汇总, 这本身就将影响OLTP系统的性能,
*7衙燯紈D?  
就算汇总出来也难以保证数据的完整性,
厉_(}鷦忖  
而且当业务主管希望稍微修改分析条件时, 此前的工作还得重来。
}?'TZ通?  
这种现象在现实中是十分常见的,
O籉zZs  
相信各个公司的信息部门及电脑部门人员都深有感触。
槞2Q?lt;嗀戯  
[R熫?yXK?  
数据仓库的概念
嚊蠿q祔  
@5'釽?浾  
随着大型数据库技术的发展,
橍偕J@奇  
数据仓库技术被提出来解决前面提出的问题。1996年, Inmon 在他的专著
耮%0%墑?  
《Building the Data Warehouse》中, 对数据仓库做了如下定义,
#埲绩啴?  
即“面向主题的、完整的、非易失的、不同时间的、用于支持决策的数据集合”。这和传统的OLTP系统有很大的区别,
鑟??繮  
它属在线分析(OLAP)系统的范畴。面向主题的,指的是它将依据一定的主题,比如经销商、产品、定单等汇总各个OLTP系统的数据。
饠%$'耘礯  
完整的, 指的是要求对各个系统数据表示进行转换,
-亝+Z?f  
用统一编码表示,比如,A系统用001表示退货, 而B系统用999表示退货,
U咉蟑:諏?  
在数据仓库中必须统一成一个编码。 非易失的, 指的是系统用户只读数据,
傸HV3雂?  
不得修改数据。 数据仓库完整地记录了各个历史时期的数据,
氰X9pS鐜 k  
而OLTP系统不会保留全部的历史记录。 OLTP系统也难以支持决策查询,
?-?餵讲?  
例如从几千万笔记录中获取不同区域的汇总报表。
蝝魃攮(?  
粄?q S匏  
数据仓库的设计
WKE?廚 6  
U闐嘶  
数据仓库的设计与传统的OLTP系统设计有较大区别,
a?h{??  
设计者不但要设计一个数据库和一个用户接口,
鉟?鍇&?c?  
还必须设计数据装载策略、数据存取工具和不间断的维护方案。
泹hD靭?6  
在数据库设计时也要从传统的数据库规范化转到强调维的设计,
傅 捌熖1X  
以便有更好的数据查询响应性能。
k納z?MS  
╇勽LU?Q  
数据仓库设计的主要步骤如下:
搟禠m兴o?  
逯煗??  
1. 系统主题的确定
[%?04柾  
櫟o鰅糙DU  
这要求系统设计人员多与业务人员沟通, 详细了解业务需求、报表需求,
?豛dx]戜 ?  
再归纳成数据仓库的主题。 例如, 经销商主题,
蠃?h哈  
包含经销商各个历史时期的级别、 销售额、信贷、活动区域等。 产品主题,
?lt;耭諹桡襐  
包含每个产品在各个历史时期、各个区域的销售额、促销力度、
7(甆鑳朌夃  
销售件数、产品类别等。
镛藬?)?  
?壼(釧霜W  
2. 数据库的逻辑设计
?鸅U戅eS?  
巵妲)HHi隮  
在确定主题后, 需要对主题包含的信息进行详细定义,
t灠?z厄m  
并对事实表和维表的关系详细定义。比如, 经销商主题中的销售额,
羘漼簋蚴8  
定义为几个字段: NetSales (净销售额),表示扣除了一切优惠折扣,数据类型为
s騵冇齯?  
Number(12,3); CusSales, 表示产品目录价的销售额, 数据类型为 Number(12,3);
?乍 峙N?  
TitleCode, 表示级别, 如101表示全国一级代理, 202表示省二级代理,
g}鬟N佈(4?  
数据类型为 VarChar2(3)等。
鷄M?anVs?  
阚t憵z,?  
3. 数据库的物理设计
!`滯鲜鷡Ф  
靪`b攫?zD  
物理设计主要考虑数据的存储方式, 使得系统有较好的性能。
;鍆.鸺桫?  
对于记录庞大的事实表, 可以考虑分区存放。
??kc顔  
而记录很少的维表则可以集中存放于某一表空间,
z?y痕?S?  
甚至可以让其数据在首次读取时驻留在系统内存中, 以加快数据存取速度。
Me4媠€?  
索引的建立也在物理设计中完成, 索引是一把双刃剑,能提高读取速度,
摑昶VQ綗迫  
也会使数据更新速度降低, 并占用大量磁盘空间。
隨?%HTF ?  
后面的案例分析中将谈到这点。
u?g岵5?  
独立磁盘阵列(RAID)方案的设计与数据更新网络的设计也需在此阶段完成。
箚C.糨p?  
合适的RAID方案对最终系统的性能有很大的影响。
糤#?袕!€?  
慍惩???  
4. 源数据获取、清洗、整理及装载设计
?\聲??  
窍氍,???  
数据仓库的数据总是来自前台作业系统、业务部门的计划数据、各类广告促销活动及其影响数据,
餞I徃弙R喟  
以及购买回来的商业数据库。 这些数据并非照搬过来就行,
黠藸惼??  
而是要按照前面提到的步骤, 以统一定义的格式从各个系统抽取出来, 经过清洗,
n壮许m鎀?  
再经过数据装载和整理程序进入数据仓库。
楅j0愶T?  
飉/cu?|+?  
5. 数据表达及访问设计
顁$#琳&  
茰鵝d4 钉?  
数据按统一格式、不同的主题存放到数据仓库后,下一步要着手数据表达及访问。
桧- 鶩/~?  
这主要考虑用户对信息的具体需求, 对应采用不同的方式。 比如,
??lt;砥卭?  
使用Oracle数据库存放数据, 可以用PL/SQL编制报表, 也可以用Developer
?F?;V劐g  
2000或Visual Basic编制报表, 当然也可以采用一些业界优秀的OLAP产品,
???"??  
例如Cognos公司的Transformer、PowerPlay Enterprise、
\e?貶  
Oracle公司的Express等。
?%蹃?窥  
}?冭摀?  
6. 不间断的维护方案的设计
1II861嚆  
拒e?y阦?  
数据仓库的运作与传统的作业系统有很大区别, 它需要不间断地维护,
鷮聒许Z赹  
否则它的性能将越来越差。 例如, 数据访问采用基于代价的优化(CBO),
?F敒艜笆  
事实表记录实施时有300万笔记录,
i=?C繑2?  
一个月后记录数为3000万,当时的CBO根本无法得到现在的最优化存取路径。
[莏T,IP  
必须设计一个不间断的维护方案, 让系统保持优良的性能。
S崆a`灥馔  
?g?[yT?  
7. 编码、测试及实施
r鲋魚a濼  
e?宑'1?  
下面的工作就是编码、测试及实施了。
褷薷ccy?  
最终的数据仓库系统结构大致如图1所示,依据不同的情况,
軇(I(7?  
系统结构图也会有些差别。
輨}奏-犝?  
釂?購[1?  
优化及案例分析
髃3詞囱?  
議DD笥&  
下面以一个具体的数据仓库系统为例,
J欥??w柌  
对优化的一些细节进行分析。该数据仓库的系统配置如下:
櫗颣 I匥钔  
A祥1 91駰  
数据库服务器: Windows 2000 Server + Oracle8i + IIS + PowerPlay
唹7监 a  
Enterprise Server
?鍲澼V?  
J? Y?柸  
应用服务器: Windows 2000 Server + Transformer
?>}撱?  
Pt梡OB'  
客户端: IE5.0以上版本。
=x矫rf0  
qA?頑 鄈  
1. RAID
BZ2.<l6*;  
}鸨&钐yt躗  
存储子系统的性能是数据仓库系统调整最重要的方面之一。
KzQㄘ 伮  
先考虑对性能要求的几个主要指标,一个是随机读(Random
g簵$,蠈葋  
Read),性能好时对于Oracle的有索引查询或哈希(Hash)查询及回滚段读取有利。
慅wWq愡迴  
第二个是随机写(Random
鞎5?董:?  
Write),性能好时对Oracle的DBWN写进程、负载较重的OLTP系统有利,对数据仓库影响较小。第三个是顺序读(Sequential
z s侹~o_}  
Read),性能好时对于备份、 全表扫描、索引创建、并行查询、临时段读取,
8\K??j  
及由重做日志文件恢复数据库有利。另一个是顺序写(Sequential
妣歺E赈齬  
Write),性能较好时对Oracle的LGWR写进程、写临时段、SqlLoader参数为Direct的写数据、表空间的建立有利。
?pKNx⒋?  
本例中数据仓库是24小时在线服务的,
T60R//??  
系统的容错能力要求也很高。最后考虑的方案为RAID 1+0, 即每两个硬盘做镜像,
8脔瑗.4/?  
然后所有硬盘条带化配置, 既保证最佳的容错和读写性能, 又使I/O负载平衡。
澏?:?R賠  
xk朚??o{  
在实施时, RAID卡参数的设置也要仔细考虑。 比如, 预先读、 延迟写、
績鍩W?=慠  
RAID卡内存配置等对I/O都具有很大影响。
8瀫紌蕪燉  
r旝€z澍↓?  
2. 索引的建立
礞A?yh  
鉖饯I85厖?  
索引是一把双刃剑, 能提高读取速度, 也会使数据更新速度降低,
?.?? 靾  
并占用大量磁盘空间。 索引的建立与查询和数据更新有直接关系。
6dd呼?炻  
对庞大记录的事实表查询符合条件的记录时, 依据相关条件建立索引,
"?J/34  
系统性能一般会有巨大改进, 但是, 如果索引对数据的区分度太差,
道?竔3?  
没有此索引反而更好。 增加索引, 将使数据插入与删除性能降低,
仟"澝釤>.'  
数据更新速度则可能提高。 所有这些需要综合考虑, 以建立合适的索引。
?'?痐  
缂 O垎禾?  
3. CBO的实际运作
}炏8凔  
8甴)張奃?  
基于代价的优化器(CBO)是一组例程, 它有助于选取满足传递给Oracle SQL
W??鮐??  
引擎做处理的查询所需数据的最佳存取路径。
{A痑3砋  
存取路径是Oracle根据对象上的索引和相关的统计数据所选取的汇集、组装查询结果的方法。
.kW?畿蔌  
对于处理海量数据的数据仓库, CBO是惟一的查询优化方法。
t淿"?専?  
?lt;? ?縉P  
有效地使用CBO方法, 要求定期分析应用程序里的表和索引。
?$[b沏z\  
分析这些对象的频率取决于这些对象的改变速率。 对于批处理数据加载程序,
遾给綖?  
应该在每次事务后, 重新分析它们。 如果系统不允许, 至少也要安排一个进程,
Ga3 崥鵿  
定期在系统负载较轻时分析数据库对象。
??捒|?  
珋#?漩??  
要分析一个模式的所有对象,可以使用DBMS_UTILITY软件包的ANALYZE_SCHEMA过程。
K絤???  
它有两个常用参数: 模式的名字和选项(Compute 或 Estimate)。 如:
U裛涌l鳚  
;霣Wn渶┉?  
execute DBMS_UTILITY.ANALYZE_SCHEMA(‘CIA_ADMIN’, ‘COMPUTE’);
引f趿l8诉6  
筦鳔読I?  
如果系统在用计算(Compute)选项时用时太多, 也可改成粗估(Estimate)选项,
樗醎wCg鍩  
并可以选择对多大的样本空间进行估计分析。 在本案例中, 曾计划每月运行一次,
賐L8驳駢>D  
后来发现, 由于每天加载的数据特别大, 10天后的性能就开始下降,
鯟X!酌覧|$  
于是改为每天晚上负载最轻时, 由进程安排自动进行分析,
騼努 a?2  
这样每天的性能都保持在最佳水平。
萬5?騼?  
蓕爿  
4. 直接装载、分区选择、网络设置等
:璂c綏-?  
D??碈'じ  
除了上面几点外, 直接装载、分区选择、网络设置等也对系统性能有影响。
k縨V4v!?  
F乄?!eX?  
作为数据仓库, 必然要不断加载越来越多的数据。
削磀H{[玘  
Oracle的数据加载工具SqlLoader有两种方式: 直接加载和常规加载。
=夥R敕鍳噖  
常规加载读取数据并将其传给Oracle SQL引擎,
碎4X8}  
由SQL引擎使用SQL的Insert语句将数据放入数据库中,由于每行都采用一个Insert语句,
髓?X?q  
需要更多资源。 直接加载时, SqlLoader将根据数据被存储的数据库表的结构,
vW 鵈?S^  
在内存中把数据组装和格式化成同样的形式,
V肷u=Q  
这就比常规加载快很多。另外,本案例中还将所有事实表都配置为Nologging模式,
1嘕痎J?  
这样将抑制重演日志的产生, 从而得到更快的速度。
F?$F粦N菜  
m?\輛#l挓  
由于采用RAID 1+0模式, 数据库的分区存储对存取性能影响不大。
#?迺庰 |?  
但分区存储对数据维护有一定好处。 例如,
湱赓NA曗{  
将事实表数据按不同季度存放在不同的分区(Partition),
? テ诩:wP  
可以单独对数据表的某个分区的数据重新整理, 而不影响这个表的其他部分,
0W檣蜛AP9  
从而获得较好的维护成本。数据加载可以在Database Server上运作,
蟣覍掱Sb9  
如果通过网络加载,
椇実B覶?  
需要考虑客户机与数据库服务器之间的通信是否具备足够带宽,
???b蛡  
本案例中使用了100M专用网络端口。 另外,
暬FP?設渹  
Oracle的网络配置对系统性能也有一定影响。 例如,
7 珻诶溹?  
将Oracle侦听器中没有用的网络协议删除, 如Named Pipes及SPX等,
&wE?伮p2?  
将TRACE_LEVEL_LISTENER的参数改成OFF, 并将sqlnet.ora
 ?v?  
中的参数设置SQLNET.AUTHENTICATION_SERVICES= (NTS) 注释掉,
堤閜瑒?甾  
将加快网络访问速度。
?裿k2?  
p?枤歗  
用户对数据的存取
|Tvn?[乍?  
???鶦罒  
数据仓库是帮助我们进行商务分析的一个强有力的工具。
&滏xvURF?  
数据仓库的成功与否完全依赖于对数据的访问是否简捷快速。
tc&?  
本例将对数据的访问分为如下三个方面: 标准报表, 随机动态的查询和多维分析。
B蟪堿?  
K1n(鰼4  
对于标准报表, 由于格式固定, 采用由数据中心用Visual
e1?FJH  
Basic或PL/SQL程序批量生产, 分发给用户或Notes
厤閠T?  
站点上供用户浏览。对于随机动态的查询, 采用Oracle的SQL*Plus,
\eV8?p  
熟练的用户可以方便地获取数据仓库的数据。多维分析其实就是一种联机分析处理(OLAP),
?W擰r}碉3  
它必须支持多维性, 可钻取性, 可旋转性及多视图模式等功能。
\,3R]???  
本案例采用的是Cognos公司的PowerPlay Enterprise Server,
]鬳埈 繦?  
每天收齐全国各个分公司, 工厂及总部ERP系统各模块数据后,
l禞彰岖tc?  
由其中的部件Transformer自动完成多维数据立方体的创建,
gl 鷩y7X?  
然后由部件Upfront自动分发到数据仓库的Web站点。 这样,
碈枟?1獸  
用户就可以及时获取全国的最新数据。
嵐﹪f 刞★  
下图是用户通过Intranet定制的一份图形报表,
?嗞:?襅?  
显示了2001年12月与2002年1月在各个区间段的销售对比。
鹍珖??  
[E&脵撳?  
在设计时就考虑数据仓库系统的优化十分重要, 根据系统应用情况的变化,
鬒窙薪橹噚  
不断地改进优化系统性能同样十分重要。
蹥P/征??  
本文提到的细节分析与读者的实际情况也许有差别,
? 儫夁5?  
但希望这种思考问题的方法对读者有一定的启发作用。
@X嬞y?9?  
`?7,THe?  
小结
據棏壢Gv(?  
a梋y氋纭蠐  
数据仓库的设计与优化是一个实践性很强的工作,除了要掌握数据仓库的理论知识外,更重要的是在实际工作中慢慢摸索、积累,只有这样才能充分发挥数据仓库的功
=僒弔R瑕?  
效,为各种应用提供更多的帮助和支持。



凡是有该标志的文章,都是该blog博主Caoer(草儿)原创,凡是索引、收藏
、转载请注明来处和原文作者。非常感谢。

posted on 2006-06-24 14:45 草儿 阅读(246) 评论(0)  编辑  收藏 所属分类: Data Warehouse

只有注册用户登录后才能发表评论。


网站导航: