建模方法论
数仓的建模或者分层,其实都是为了更好的去组织、管理、维护数据,所以当你站在更高的维度去看的话,所有的划分都是为了更好的管理。小到JVM 内存区域的划分,JVM 中堆空间的划分(年轻代、老年代、方法区等),大到国家的省市区的划分,无一例外的都是为了更好的组织管理
访问性能:能够快速查询所需的数据,减少数据I/O。
数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数据系统中的存储成本和计算成本。
使用效率:改善用户应用体验,提高使用数据的效率。
数据质量:改善数据统计口径的不一致性,减少数据计算错误的可能性,提供高质量的、一致的数据访问平台。
需要注意的建模其实是和公司的业务、公司的数据量、公司使用的工具、公司数据的使用方式密不可分的,因为模型是概念上的东西,需要理论落地至于落地到什么程度,就取决于公司的现状了
维度建模
概念和背景
维度模型是数据仓库领域大师Ralph Kimball 所倡导,他的《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。
维度建模源自数据集市,主要面向分析场景 Ralph Kimball 推崇数据集市的集合为数据仓库,同时也提出了对数据集市的维度建模,将数据仓库中的表划分为事实表、维度表两种类型。
一般也称之为星型结构建模,有时也加入一些雪花模型在里面。维度建模是一种面向用户需求的、容易理解的、访问效率高的建模方法
维度模型通常以一种被称为星型模式的方式构建。所谓星型模式,就是以一个事实表为中心,周围环绕着多个维度表。
还有一种模式叫做雪花模式,是对维度做进一星型模型做OLAP分析很方便
为什么选择维度建模
1. 适配大数据的处理方式
维度模型的非强范式的,可以更好的利用大数据处理框架的处理能力,避免范式操作的过多关联操作,可以实现高度的并行化。
数据仓库大多数时候是比较适合使用星型模型构建底层数据Hive表,通过大量的冗余来提升查询效率,星型模型对OLAP的分析引擎支持比较友好,这一点在Kylin中比较能体现。
雪花模型在关系型数据库中如MySQL,Oracle中非常常见,尤其像电商的数据库表。
2. 自下而上的建设现状
表已经存在,业务已经开发完毕,需求直接提过来了,这几乎是一个普遍现状,因为很少有公司会提前成立数据部门,让数据部门跟随着业务从头开始一直成长,都是当业务发展到一定的阶段了,想通过数据来提高公司的运营效果
3. 简单的模型 使用简单
这个模型相对来说是比较简单的,简单主要体现在两个方面
维度建模非常直观,紧紧围绕着业务模型,可以直观的反映出业务模型中的业务问题。不需要经过特别的抽象处理,即可以完成维度建模。这一点也是维度建模的优势。
星型结构的实现不用考虑很多正规化的因素,设计与实现都比较简单。




