vlambda博客
学习文章列表

数据仓库与数据库的区别、特点、存储方式以及维度建模

随着大数据时代的到来,‘数据仓库’这个词越来越被大家熟知,今天老李跟大家聊聊数据仓库与数据库的不同,以及自身特点和建模方式等内容。
从某种意义上说,数据仓库是数据库概念的升级。它们都是存放数据的地方,只不过从数据量来说,数据仓库要比数据库更大庞大,基本以TB、PB为单位。数据库是传统的关系型数据库,主要用于处理基本、日常的事务处理;而数据仓库主要用于数据挖掘和数据分析,辅助领导做决策。
数据仓库的特点如下:
  • 数据仓库面向主题的 一般从用户实际需求出发,将不同平台的数据源按设定主题进行划分整合,与传统的面向事务的操作型数据库不同,具有较高的抽象性。 面向主题的数据组织方式,就是在较高层次对分析对象数据的一个完整、统一并一致的描述 ,能完整及统一地刻画各个分析对象所涉及的有关企业的各项数据,以及数据之间的联系, 比如以游戏为主题的游戏数仓,或者以电商为主题的电商数仓等。
  • 数据仓库具有集成性 ,其中存储的数据大部分来源于传统的数据库,但并不是将原有数据简单的直接导入,而是需要进行预处理。这是因为事务型数据中的数据一般都是有噪声的、不完整的和数据形式不统一的。这些“脏数据”的直接导入将对在数据仓库基础上进行的数据挖掘造成混乱。
    “脏数据”在进入数据仓库之前必须经过ETL数据清洗(包括抽取、清洗、转换)才能生成从面向事务转而面向主题的数据集合。数据集成是数据仓库建设中最重要,也是最为复杂的一步。
  • 数据仓库具有稳定性 ,存储的数据主要为决策者分析提供数据依据。决策依据的数据是不允许进行修改的。即数据保存到数据仓库后,用户仅能通过分析工具进行查询和分析,而不能修改。数据的更新升级主要都在数据集成环节完成,过期的数据将在数据仓库中直接筛除。
  • 据仓库具有动态性,数据会随时间变化而定期更新,不可更新是针对应用而言,即用户分析处理时不更新数据。每隔一段固定的时间间隔后,抽取运行数据库系统中产生的数据,转换后集成到数据仓库中。
    随着时间的变化,数据以更高的综合层次被不断综合,以适应趋势分析的要求。当数据超过数据仓库的存储期限,或对分析无用时,从数据仓库中删除这些数据。关于数据仓库的结构和维护信息保存在数据仓库的元数据(Metadata)中,数据仓库维护工作由系统根据其中的定义自动进行或由系统管理员定期维护。


数据仓库的存储方式:
数仓都是以集群的方式存储,服务器数量十几台、几百台不等,甚至有的集群数量达到上千台。目前解决如此庞大数据的写入、读取,HDFS可以提供完美的数据存储解决方案。
离线数据分析与计算,对实时性要求不高,可以用Hive(慢但稳定);也可以通过hive作为元信息的表结构化管理,用spark sql、impala、presto sql 去操作,查询速度快几倍、十倍不等。
数据仓库的维度建模:
  • 两种不同的建模思想

Inmon主张自上而下的架构,它将数据仓库定义为整个企业级的集中存储 数据仓库存放着最低的详细级别的原子数据。 维度 数据集市只是在数据仓库完成后才 创建的。因此,数据仓库是企业信息工厂(CIF)的中心,它为交付商业智能提供逻辑框架。
不同的 OLTP 数据集中到面向主题、集成的 、不易失的和时间变化的结构中,用于以后的分析。 数据可以通过 下钻到最细层,或者上卷到汇总层 数据集市应该是数据仓库的子集,每个数据集市 针对独立 部门特殊设计的

而Kimball正好与Inmon相反,Kimball架构是一种自下而上的架构,它认为数据仓库是一系列数据集市的集合。它首先建立最重要的业务单元或部门的数据集市。这些数据集市可以为透视组织数据提供一个较窄的视图,需要的时候,这些数据集市还可以与更大的数据仓库合并在一起。

Kimball将数据仓库定义为“一份针对查询和分析做特别结构化的事物数据拷贝。”Kimball的数据仓库结构就是著名的数据仓库总线。企业可以通过一系列维数相同的数据集市递增地构建数据仓库,通过使用一致的维度,能够共同看到不同数据集市中的信息,这表示它们拥有公共定义的元素。

两种模式各有优势,Inmon模式适合开发进度慢,实施成本高,适合对设计科学性和规范性较高的企业,在业务模式较固定的行业应用较好,比如金融和电信等行业。Kimball 模式适合快速迭代,实施成本低,能够较快交付任务。这种模式非常适应互联网行业的高速发展,也适合中小型企业

  • 范式建模和维度建模

范式建模法由Inmon 所提倡,主要运用于传统数仓之中,一般传统的数仓是建立在关系型数据库之上,不是大数据平台下。它解决关系型数据库的数据存储,是一种技术层面上的方法。目前范式建模法大部分采用的是三范式建模法。

Kimball提出了维度建模方法,这个也是企业中最常见的方法,将表分为事实表维度表维度模型关注的重点是如果使最终用户访问数据仓库更容易,并有较高的性能。

其实简单来讲,建模并不高大上,就是设计表结构。而这个表里面的数据内容来源,就分为事实表和维度表。

事实表就是发生在现实世界中的操作型事件,其所产生的可度量数值,存储在事实表中。通过时间维度,地域组织维度,指标值可以去确定在某时某地的一些指标值怎么样的事实。事实表的每一条数据都是几条维度表的数据和指标值交汇而得到的。

例如:今天我在商城买了一双鞋,花了100元。这是一个事实,可以拆分为三个维度:时间维度-今天,地域维度-商城,物品维度-鞋子,数值-100元。

维度表是对业务过程的上下文描述,主要包含代理键、文本信息和离散的数字。它是进入事实表的入口,丰富的维度属性给出了对事实表的分析切割能力,它一般是行少列多。如果属性值是离散的,用于过滤和标记,就放到维度表里,如果是属性值是连续取值,可用于计算的,就放到事实表中。

总之,事实表的设计是以能够正确记录历史信息为准则,维度表的设计是以能够以合适的角度来聚合主题内容为准则。

在维度建模的基础上又分为三种模型:星型模型、雪花模型、星座模型(考虑到篇幅问题,后面会再详细介绍)。

模型选择,取决于性能优先,还是灵活优先,在实际开发中,不会绝对选择一种,根据情况灵活组合,甚至并存,但整体而言,更倾向于维度更少的星型模型,尤其是Hadoop体系,减少Join就是减少Shuffle,性能差距很大。

从今天开始,老李会不断分享大数据相关知识,希望大家多多关注!