oracle warehouse 一些基本概念
先介绍一些基本的概念,为了后面介绍如何在oracle上使用materialized view + dimension 部署foodmart demo 的例子的时候做些背景介绍。
数据仓库不同与普通的OLTP 数据模型,它由两种表组成:事实表(Fact table) , 维度表(Dimension Table)
Fact table : Fact table 主要储存用户实际感兴趣的信息的表 . 事实表有多个维表的外键 ,
事实表的主属性可以定义成多个外键的集合 . 事实表的从属性称为事实(Fact)或者叫度量(Measure)
,它们一般都是数值或其他可以进行计算的数据.
Dimension table : Dimension table 就是我们需要分析的主题了,它主要表现层次结构,分类信息,比如Time,Product,
Customer,location ,dimension table 有时候又叫做lookup 或reference 表,dimension
table 一般随ETL过程缓慢的变化而变化的.它一般比较小,但是却决定了数据库的性能,因为我们要在fact table
和dimension table 做多种join 操作.
Star Schemas
星形模型之所以被称作星形模型是因为它是由中心的一个或者多个事实表周围围绕一组维表组成。
materialized view
在oracle中,materialized view 是一个预先计算的,从fact table 和dimension table
做的聚合操作(不一定只有sum操作),view 是不储存数据的,但是materialized view
是存储数据的,它是oracle构建数据仓库最重要的技术之一,主要是为了解决性能的问题,就象MOLAP 系统预先计算的cube 是一样的.
dimension
dimension 是建立在dimension table 是上的,它只是一个概念的定义,主要定义level,category
的信息,它实际并不存储任何的数据,数据仍然是在dimension table中的,dimension 主要是为了配合materialized
view 来解释数据的层次关系,也是为了解决性能问题的.
为了在oracle中使用materialized view ,用户必须有create materialized view 的权限.
为了使materialized viwe 发挥作用,两个参数必须先定义:
QUERY_REWRITE_ENABLED=TRUE;
QUERY_REWRITE_INTEGRITY=TRUSTED;
materialized view 主要可以减少物理的读写次数,减少CPU的计算时间,提高响应速度.但它也会占用更多的磁盘空间,包括materialized view 和它的index.
关于如何构建高性能的数据仓库,ningoo 在 http://www.ningoo.net/2007/05/21/data_warehouse_guide_notes.htm 上也有一篇文章讲解了在oracle上构建数据仓库的性能优化技巧,包括
1 . RELY constraint
2 . bitmap index 和 Bitmap join index
3 . Unique constraint & unique index 的 disable validate
4 . Partition table
大家可以到ningoo 的网站上去看看.另外还有三篇关于oracle datawarehouse 的文章,关于materialized view 和 dimension的例子,大家可以到
http://www.akadia.com/services/ora_materialized_views.html 介绍materialized view
http://www.akadia.com/services/ora_dimensions.html 介绍一个dimension + materialized view
http://www.akadia.com/services/ora_olap_dimensions.html 介绍两个跨表的dimension + materialized view
上面的三篇文章都写的非常的通俗易懂,而且它提供的脚本可以很容易的运行例子,是很好的oracle warehouse 文章,推荐大家看看.
还有些procedure 用来验证dimension的数据是否有效的在
http://www.stanford.edu/dept/itss/docs/oracle/10g/appdev.101/b10802/d_dimens.htm
EXEC dbms_utility.analyze_schema(' your db name ','COMPUTE');
EXEC dbms_olap.validate_dimension(' dimension name ',' db name ',FALSE,TRUE);
SELECT * FROM mview$_exceptions;
下篇介绍在oracle上部署mondrian 的 foodmart demo
.
如果有哪位朋友可以推荐一下武汉的公司,最好是小一点的公司(大公司估计自己水品有限),如果有需要J2EE开发方向的工作职位的话,推荐一下,
jj12tt@yahoo.com.cn ,先谢谢了.