关于什么是数据仓库的一次对话
前几天一个开发同事见我桌面上有一本书<数据仓库>,问我什么是数据仓库,因为他算是外行,于是发生一次有意思的对话,现在想起来,也挺有意思的.
问:数据仓库有什么特别的地方?
答:没什么特别,跟普通关系数据库没什么两样.
问:啊,那有什么特别?
答:数据仓库本身物理上也是关系数据库,只是数据仓库系统是一个体系,一个过程.数据仓库技术要解决的问题是如何建立,管理,维护运行一个数据仓库.
问:数据仓库跟普通数据库存储的数据不一样?
答:数据仓库面向分析,普通业务数据库面向交易,我们公司产品就是业务数据库.面向分析的数据库重点在查询,业务数据库重点在修改更新.
问:数据仓库就是把业务数据库的数据抽出来建立新的数据库,专门供分析查询用?
答:可以这么说,不过不是简单的抽取,因为两者的应用不同,所依赖的数据模型不同,数据仓库主要采用多维模型,而业务数据库采用关系模型。所以,抽取的过程是一次模型的转换,从关系模型转换为多维模型,这个过程业界成为ETL,除了转换外,还要考虑数据集成,清洗等。
问:可是你不是说数据仓库物理上也是关系模型,怎么表示多维模型?
答:业界用称为星型结构的多个表来表示多维模型,多个维表围绕在事实表转,其中事实表表示数据,维表表示维度。多维模型也成Cube,立方体,边是维度,格子是发生数据。
问:那OLAP是什么,数据仓库不就是OLAP吗?
答:OLAP是联机分析处理的意思,OLAP是一本技术,它的产品分为服务器和前端产品,OLAP服务器也叫做多维数据库,数据仓库跟OLAP的关系,就像父亲和孩子的关系,广义的数据仓库包含OLAP,有些产商把两者混起来。但是,实际上数据仓库可以脱离OLAP存在,不供OLAP使用。这个比较复杂,很难一下说清楚。
问: 再说说嘛。
答: 其实,OLAP技术是数据仓库的一种应用,OLAP一般基于数据仓库,也就是说,OLAP服务器中的多维数据,也是从数据仓库中来的。OLAP一般位为数据仓库之上,olap的作用是为前端报表或控件提供直观的易于分析的多维数据,是数据与信息之间的一种桥梁。
问: OLAP还是挺神奇的,它到底能干什么?
答: OLAP技术其实定义了一些逻辑模型,包括结构模型和行为模型,结构模型即维度、Cube模型,把现实的数据以多维的形式来表达,有利于分析。为什么有利于分析呢,行为模型就是定义在结构模型之上的分析行为,包括维度自由组合、旋转、钻取等等,而这些行为是比较直观的,符合人脑的思维习惯。
问: 等等,钻取是什么,好像很熟,是数据挖掘吗?
答: 晕,数据挖掘跟这不搭边的,等下再说。钻取是从高粒度的数据钻到低粒度的数据中,比如从广东省的汇总数据钻到各个城市的数据。这在以前的报表工具中是很难实现的。
问: 怎么做到钻取?
答: 其实,维度不是线性的,而是一颗树,术语叫“带有层级关系的维度”,这个层级关系就定义了父子关系,钻取路径。
问: 哦,还是晕,那我们自己的OLAP工具在做什么。
答: 我们自己的OLAP工具有别于国外产商,我们没有存储,也就是没有OLAP服务器的概念。我们有OLAP前端和OLAP服务引擎,服务引擎直接从业务数据库或者数据仓库中抽取数据生成Cube模型的数据,OLAP前端组件比如表格和图形,将Cube模型的数据表现出来,并提供分析功能。也就是说,我们的OLAP定义了一套OLAP模型,就是上面说的结构模型和行为模型,服务引擎负责把关系模型的数据转换为多维模型,并提供了OLAP分析行为借口,前端能够识别这个OLAP模型。其实,OLAP技术只是定义了一些模型,并未定义如何实现,每个专业产商都有自己的实现和理念。有些产商的产品根本就没有OLAP产品,它也能实现OLAP分析功能。
问: 哦,听起来挺不错的,有空研究研究。
答: 千万别,不懂更好:)
后记: 过了一会儿,我听到他跟他们项目经理说:“他们组做了一个3D引擎,能够将数据库数据变成3D图形”,吐血。