数据仓库与数据库的区别、特点、存储方式以及维度建模
-
数据仓库面向主题的 , 一般从用户实际需求出发,将不同平台的数据源按设定主题进行划分整合,与传统的面向事务的操作型数据库不同,具有较高的抽象性。 面向主题的数据组织方式,就是在较高层次对分析对象数据的一个完整、统一并一致的描述 ,能完整及统一地刻画各个分析对象所涉及的有关企业的各项数据,以及数据之间的联系, 比如以游戏为主题的游戏数仓,或者以电商为主题的电商数仓等。 -
数据仓库具有集成性 ,其中存储的数据大部分来源于传统的数据库,但并不是将原有数据简单的直接导入,而是需要进行预处理。这是因为事务型数据中的数据一般都是有噪声的、不完整的和数据形式不统一的。这些“脏数据”的直接导入将对在数据仓库基础上进行的数据挖掘造成混乱。 “脏数据”在进入数据仓库之前必须经过ETL数据清洗(包括抽取、清洗、转换)才能生成从面向事务转而面向主题的数据集合。数据集成是数据仓库建设中最重要,也是最为复杂的一步。 -
数据仓库具有稳定性 ,存储的数据主要为决策者分析提供数据依据。决策依据的数据是不允许进行修改的。即数据保存到数据仓库后,用户仅能通过分析工具进行查询和分析,而不能修改。数据的更新升级主要都在数据集成环节完成,过期的数据将在数据仓库中直接筛除。 -
数 据仓库具有动态性,数据会随时间变化而定期更新,不可更新是针对应用而言,即用户分析处理时不更新数据。每隔一段固定的时间间隔后,抽取运行数据库系统中产生的数据,转换后集成到数据仓库中。 随着时间的变化,数据以更高的综合层次被不断综合,以适应趋势分析的要求。当数据超过数据仓库的存储期限,或对分析无用时,从数据仓库中删除这些数据。关于数据仓库的结构和维护信息保存在数据仓库的元数据(Metadata)中,数据仓库维护工作由系统根据其中的定义自动进行或由系统管理员定期维护。
两种不同的建模思想
而Kimball正好与Inmon相反,Kimball架构是一种自下而上的架构,它认为数据仓库是一系列数据集市的集合。它首先建立最重要的业务单元或部门的数据集市。这些数据集市可以为透视组织数据提供一个较窄的视图,需要的时候,这些数据集市还可以与更大的数据仓库合并在一起。
Kimball将数据仓库定义为“一份针对查询和分析做特别结构化的事物数据拷贝。”Kimball的数据仓库结构就是著名的数据仓库总线。企业可以通过一系列维数相同的数据集市递增地构建数据仓库,通过使用一致的维度,能够共同看到不同数据集市中的信息,这表示它们拥有公共定义的元素。
两种模式各有优势,Inmon模式适合开发进度慢,实施成本高,适合对设计科学性和规范性较高的企业,在业务模式较固定的行业应用较好,比如金融和电信等行业。Kimball 模式适合快速迭代,实施成本低,能够较快交付任务。这种模式非常适应互联网行业的高速发展,也适合中小型企业。
范式建模和维度建模
范式建模法由Inmon 所提倡,主要运用于传统数仓之中,一般传统的数仓是建立在关系型数据库之上,不是大数据平台下。它解决关系型数据库的数据存储,是一种技术层面上的方法。目前范式建模法大部分采用的是三范式建模法。
Kimball提出了维度建模方法,这个也是企业中最常见的方法,将表分为事实表和维度表。维度模型关注的重点是如果使最终用户访问数据仓库更容易,并有较高的性能。
其实简单来讲,建模并不高大上,就是设计表结构。而这个表里面的数据内容来源,就分为事实表和维度表。
事实表就是发生在现实世界中的操作型事件,其所产生的可度量数值,存储在事实表中。通过时间维度,地域组织维度,指标值可以去确定在某时某地的一些指标值怎么样的事实。事实表的每一条数据都是几条维度表的数据和指标值交汇而得到的。
例如:今天我在商城买了一双鞋,花了100元。这是一个事实,可以拆分为三个维度:时间维度-今天,地域维度-商城,物品维度-鞋子,数值-100元。
维度表是对业务过程的上下文描述,主要包含代理键、文本信息和离散的数字。它是进入事实表的入口,丰富的维度属性给出了对事实表的分析切割能力,它一般是行少列多。如果属性值是离散的,用于过滤和标记,就放到维度表里,如果是属性值是连续取值,可用于计算的,就放到事实表中。
总之,事实表的设计是以能够正确记录历史信息为准则,维度表的设计是以能够以合适的角度来聚合主题内容为准则。
在维度建模的基础上又分为三种模型:星型模型、雪花模型、星座模型(考虑到篇幅问题,后面会再详细介绍)。
模型选择,取决于性能优先,还是灵活优先,在实际开发中,不会绝对选择一种,根据情况灵活组合,甚至并存,但整体而言,更倾向于维度更少的星型模型,尤其是Hadoop体系,减少Join就是减少Shuffle,性能差距很大。
从今天开始,老李会不断分享大数据相关知识,希望大家多多关注!