简介

作为一名数据的规划者,我们肯定希望自己的数据能够有秩序地流转,数据的整个生命周期能够清晰明确被设计者和使用者感知到。直观来讲就是如下的左图这般层次清晰、依赖关系直观。

但是,大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的。如下的右图,在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系。

因此,我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是谈到的数据分层。数据分层并不能解决所有的数据问题,但是,数据分层却可以给我们带来如下的好处:

清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题

一种通用的数据分层设计

为了满足前面提到数据分层带来的好处,我们将数据模型分为三层:数据运营层( ODS )、数据仓库层(DW)和数据应用层(APP)。如下图所示。简单来讲,我们可以理解为:ODS层存放的是接入的原始数据,DW层是存放我们要重点设计的数据仓库中间层数据,APP是面向业务定制的应用数据。下面详细介绍这三层的设计。


以下是将数据仓库分为三层做的逐层说明

一、数据运营层:ODS(Operational Data Store)

“面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。

一般来讲,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层来做。

二、数据仓库层:DW(Data Warehouse)

数据仓库层是我们在做数据仓库时要核心设计的一层,在这里,从 ODS 层中获得的数据按照主题建立各种数据模型。DW层又细分为 DWD(Data Warehouse Detail)层、DWM(Data WareHouse Middle)层和DWS(Data WareHouse Servce)层。

1. 数据明细层:DWD(Data Warehouse Detail)

该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。

另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性,后文会举例说明。

2. 数据中间层:DWM(Data WareHouse Middle)

该层会在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。

直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标。

3. 数据服务层:DWS(Data WareHouse Servce)

又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。

一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。

在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。

三、数据应用层:APP(Application)

在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、PostgreSql、Redis等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。比如我们经常说的报表数据,一般就放在这里。

以下是借的一张图以供各位程友参考:

数据层的存储一般如下:

Data Source:数据源一般是业务库和埋点,当然也会有第三方购买数据等多种数据来源方式。业务库的存储一般是Mysql 和 PostgreSql。

ODS 层:ODS 的数据量一般非常大,所以大多数公司会选择存在HDFS上,即Hive或者Hbase,Hive居多。

DW 层:一般和 ODS 的存储一致,但是为了满足更多的需求,也会有存放在 PG 和 ES 中的情况。

APP 层:应用层的数据,一般都要求比较快的响应速度,因此一般是放在 Mysql、PG、Redis中。

希望对各大程友有帮助!!!

数据仓库三层架构设计相关推荐

  1. Spring Boot开发基于三层架构设计:Dao层、Service层、Controller层

    三层架构设计:基于Spring Boot开发要使用三层架构: 数据访问层(Dao).业务逻辑层(Service).控制层(Control-ler) (1)数据访问层(Dao):Dao层是最底层的设计, ...

  2. python 三层架构说明_常用的三层架构设计图解大全

    软件系统最常用的一般会讲到三层架构,其实就是将整个业务应用划分为表示层.业务逻辑层.数据访问层等,有的还要细一些,通过分解业务细节,将不同的功能代码分散开来,更利于系统的设计和开发,同时为可能的变更提 ...

  3. 三层架构学习的困难_“网工起航计划”3天集训营 带你了解大型企业网络架构设计!...

    点击蓝字 关注我们 网工起航计划 3天集训营 带你了解大型企业网络架构设计 开营时间:8月26日晚8点 DAY1:企业园区网二层架构冗余设计实战  时间:8月26日20:00-21:30 1.网络通信 ...

  4. 数据仓库的架构-参考

    数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support).其实数据仓库本身并不"生产"任何数据,同时自身也不需要"消费&quo ...

  5. 趣味理解:三层架构与养猪—《.NET深入体验与实战精要》

    为了更好地让初学者轻松入门,这里仍然采用趣味性的方式聊一些常用技术点,致力于.NET新手们的快速提高!知识都是普通的,关键是学习的思路.技术源于生活,技术原来可以这样学.抛砖引玉而已.  层次结构在现 ...

  6. 三层架构---理论篇

    What is it? 每当我们接触一个新名词,首先要问问自己"它是什么",这样才会有更强烈的好奇心与求知欲去弄明白它. 三层架构,由它的名字通俗易懂的理解就是三个层次的结构.那么 ...

  7. 程序员过关斩将--从未停止过的系统架构设计步伐

    " 首先,这篇文章肯定会得罪一些人 " 其次,此文只代表我个人的意见,仅供参考 从分层说起 谈到系统架构的分层和系统领域边界的划分,每个架构师,每个技术经理,甚至每个程序员都有自己 ...

  8. 三层架构与设计模式思想部署企业级数据库业务系统开发

    1. 三层架构介绍 1.1关于架构 架构这个词从它的出现后,就有许许多多的程序员.架构师们激烈地讨论着它的发展,但是架构一词的出现,却是随着三层架构的出现才出现的.当然,目前应用三层架构开发也正是业界 ...

  9. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

最新文章

  1. vue-cli3打包注意路径的问题
  2. Ftp实现上传文件至远程服务器
  3. VTK:几何对象之Sphere
  4. FreeMarker基础语法教程
  5. Exception in thread “Quartz Scheduler [HmpScheduler]“ org.springframework.scheduling.SchedulingExcep
  6. 【华为云技术分享】基于自动机器学习的心脏病预测模型(1)
  7. @vue-cli的安装及vue项目创建
  8. android手机电量测试,Android手机app耗电量测试工具 - Gsam Battery Monitor
  9. redis trib 常用命令
  10. 下载并打开Github源码教程
  11. 免费比对工具DiffMerge
  12. 谷歌浏览器崩溃,无法搜索
  13. STM8L使用ADC内部参考电压通道测量VDD电压
  14. Gateway/Zuul + OpenApi 集中管理 API 资源
  15. 美国贝勒大学计算机科学专业怎么样,美国贝勒大学好吗
  16. 容联与腾讯云牵手!这一合作背后有何深意?
  17. 根据汉字,获取拼音首字母(转)
  18. windows7 系统下载
  19. 集合位置(洛谷 P1491)
  20. 数据库设计之概念结构设计---------E-R图详解 (各种各样的实例)

热门文章

  1. 怎样欣赏和点评艺术摄影作品(转)
  2. Windows Terminal 配置文件+图形化配置界面+右键菜单+管理员权限
  3. 纯真的年代 暖暖的亲情——我眼中的彼得(电影《纳尼亚传奇》观后感)
  4. [无线] Android 系统开发学习杂记
  5. Fidder应用(一)
  6. 小公主的浪漫邂逅——温柔之花(Matlab代码实现)
  7. 探讨VMware ESXI虚拟网络和物理网络的对接
  8. Html5 Canvas绘图实例
  9. 嵌入式Linux与物联网软件开发:C语言内核深度解析
  10. 人工智能时代对隐私的思考