数据系统架构-3.数据仓库设计
3.数据仓库设计
序
数据仓库是为了让人人都可以低成本的使用数据,按照一定标准打造的全量数据资料的集合。
目标
- 数据仓库设计的目标,就是把过去已经发生的非结构化的日志数据转成结构化的数据与后端关系型的数据库里的数据资源进行有效的整合和存储;
- 数据按照特定的逻辑生成不同层级的数据表,以供业务分析人员低成本的使用数据;
- 良好的数仓设计可以保证逻辑的复用、节约计算资源、保证数据质量,降低数据分析成本,提高数据使用效率与价值。
开发原则
- 避免烟囱式数据开发,优先根据主题域设计对应的数据仓库表
- 统计数据严禁从底层数据表直接统计
- 统一库、表、SQL规范
- 数仓地图、逻辑文档的沉淀与推广,形成共识
数仓设计
数据仓库与传统的关系型数据库,由于应用场景与实现技术的差异,数据仓库在设计的时候大多数都是违反关系型数据库三范式进行设计的开发的。
分层
ODS:数据来源层,主要包含业务数据库快照数据(rawdb)、埋点数据(rawdata)、其他业务等数据。
TMP:临时层,数据处理的辅助处理层,服务于DW、DM层,主要是一些中间结果临时存储的数据,包括:计算任务的中间结果数据、ODS层轻度综合和汇总统计的数据等,定期清理。
DIM:维度数据层,主要包含一些字典表、维度数据。实例:品类字典表、城市字典表、终端类型表
DW:data warehouse,存储经过标准规范化处理(即数据清洗)后的运营数据,是基础事实数据明细层。实例:后端日志明细表、前端埋点日志明细表、mysql各业务数据经过ETL处理后的表。
DM:data market(也叫DWS:data warehouse service),数据主题层或者宽表层,按部门按专题进行划分,支持OLAP分析、数据分发等,其信息主要来源于DW 或TMP层汇总数据。实例:新激活用户业务分析表、日活用户业务分析表、历史激活用户业务分析表、用户行为轨迹表、红包业务表、交易品类来源多维表、商业广告多维分析报表
ADS:application database service,应用数据层, 面向具体应用的表,要创建在这层,可导入hbase或mysql等使用。实例:按天、小时、5分钟粒度计算汇总的结果存入mysql、hbase的报表
模型
- 星型模型:核心是一个事实表及多个非正规化描述的维度表组成。
- 雪花模型:是星型模型的扩展,不同的是维度表被规范化,进一步分解到附加表中
- 大星座模型:由多个事实表组合,维表是公共的,可以被多个事实表共享。星座模型是数据仓库最常使用的模型。
数据仓库规范
库规范
数据库命名(集群名_公司名_数据分层_部门)
表规范
ODS:
- raw_业务数据库表名(保持一致)_更新方式(如果增量同步加“_inc”,全量“_full”)_时间粒度
- log_前端/后端日志_更新方式(如果增量同步加“_inc”,全量“_full”)_时间粒度
TMP:
- tmp_数据层类型(dw|dm)_{业务过程描述}
DIM:
- dim_维度类型(cate|city|channel|group)
DW:
- 日志:dw_log_{业务主题域}_{业务过程描述}_更新方式_时间粒度
- 业务数据库:dw_数据库类型(mysql|hbase|wtable|redis){业务主题域}{业务过程描述}_更新方式_时间粒度
- 多数据源:dw_{业务主题域}_{业务过程描述}_更新方式_时间粒度
DM:
- dm_{数据主题域}_{业务过程描述}_更新方式_时间粒度
ADS:
- ads_{业务过程描述}_更新方式_时间粒度
数据主题域
- 交易:trade
- 收入:income
- 推送:push
- 流量:traffic
- 营销:market
- 服务:service
- 商业广告:biz
- 渠道:channel
- 地址:address
- 财务:finance
- 风控:spam
- 竞品:compete
- ……
更新方式命名规范:
- 增量:inc
- 全量:full
- ……
分区表表名时间粒度命名规范:
- 小时(hour):1h
- 天(day):1d
- 周(week):1w
- 月(month):1m
- 季度(quarter):1q
- 年(year):1y
- …
分区字段: 日期分区统一命名为:dt,格式:yyyy-MM-dd or yyyy-MM or yyyy
**非分区表表名时间粒度后面加:**统一为”_0p”
字段
字段命名规范:seller_id、buyer_id、first_from、order_source、xxx_date、xxx_time
日期字段:<业务主体>_date
时间字段:<业务主体>_time
属性字段:属性自身英文单词;如:status
id 字段:<标识主体>id;
标识字段:is<标识主体>;如:is_true
指标字段:时间周期+修饰词+原子指标
计次字段:<计数主体>_pv;如:visit_pv
排重计数字段:<计数主体>_uv;如:visit_uv
价格字段:<业务主体>_price;如:pay_price
来源字段:<业务主体>_source;如:order_source
比例字段:<业务主体>_rate;如:gmv_yoy_rate
元数据管理
1.描述哪些数据在数据仓库中;
2.定义要进入数据仓库中的数据和从数据仓库中产生的数据;
3.记录根据业务事件发生而随之进行的数据抽取工作时间安排;
4.记录并检测系统数据一致性的要求和执行情况;
5.衡量数据质量。
脉络地图
在收集整理了各种日志、业务系统数据之后,我们创建了自己的数据仓库,根据数据仓库的元信息等等,我们应该生成一个数据仓库核心脉络地图,以供其他人员清洗明了的掌握数据仓库的核心表逻辑与结构。当开发一个数据统计需求时,我们可以快速的定位到自己所需使用的表并清晰明了表中数据的逻辑,做到表可用、表敢用、大大降低数据仓库使用沟通成本。
实时数仓
随着技术的发展,大数据处理不断的朝着SQL化,批流合一的方向发展。我们处理数据的速度越来越快,与之对应的就是我们可以带来更快的数据产出,投入到对应的分析场景当中,提升数据时效性充分发掘数据价值。实时数仓可以为我们带来以下几个有点:
- 整体提升数据时效性与价值
- 接入各类实时分析查询引擎提供实时分析能力,比如 druid
- 合理平滑的利用计算资源,无需在凌晨大量离线任务启动,造成资源使用高峰、任务堆积等待。
个人主页
上一篇 《数据系统架构-2.元数据管理》
下一篇 《数据系统架构-4.指标定义系统》
数据系统架构-3.数据仓库设计相关推荐
- 大数据系统架构的通用模块有哪些
企业要开展大数据相关业务,首先就需要基于自身的需求,来设计搭建数据系统平台.而大数据系统平台的搭建,需要基于实际需求,来进行系统架构规划.下面来对大数据系统架构模块做一个简单的介绍. 通常来说,一个大 ...
- 大数据系统架构模块解析
企业要开展大数据相关业务,首先就需要基于自身的需求,来设计搭建数据系统平台.而大数据系统平台的搭建,需要基于实际需求,来进行系统架构规划.今天我们就从大数据平台开发的角度,来对大数据系统架构模块做一个 ...
- 大数据架构选型与设计
大数据架构选型与设计 1.1 如何构建大数据平台? 1.1.1 数据库与ER建模 1.1.1.1 数据库(DataBase) 数据库是按照数据结构来组织.存储和管理数据的仓库,是一个长期存储在计算机内 ...
- 两种主流大数据系统架构的区别,终于有人讲明白了
导读:从资源管理角度来看,当前的大数据系统架构主要有两种:一种是MPP数据库架构 ,另一种是Hadoop体系的分层架构.这两种架构各有优势和相应的适用场景.本文主要讲这两种架构的区别. 同样都可以处理 ...
- 大数据平台开发:大数据系统架构模块解析
企业要开展大数据相关业务,首先就需要基于自身的需求,来设计搭建数据系统平台.而大数据系统平台的搭建,需要基于实际需求,来进行系统架构规划.今天我们就从大数据平台开发的角度,来对大数据系统架构模块做一个 ...
- 深入浅出大数据存储架构,如何设计才能满足需求?
"与数据同行"开通了微信群,现已汇聚了4000位小伙伴了,加我为微信好友(微信号:fuyipingmnb)申请入群,让我们共建一个数据社区,<与数据同行>致力于为您提供 ...
- 马蜂窝数据仓库设计与实践
Part.1 马蜂窝数据仓库与数据中台 最近几年,数据中台概念的热度一直不减.2018 年起,马蜂窝也开始了自己的数据中台探索之路. 数据中台到底是什么?要不要建?和数据仓库有什么本质的区别?相信很多 ...
- 数据系统架构-6.BI数据展示平台
6.BI数据展示平台 一.序 在有了数仓.实时.离线的数据之后,我们需要一个数据展示分析的平台.如果为了节约成本这部分我们可以是使用一些开源的BI平台,比如cboard.或者在此基础之上做一些定制化二 ...
- 大数据系统架构包含内容涉及哪些?
大数据系统架构包含内容涉及哪些? [导语]大数据的应用开发过于偏向底层,具有学习难度大,涉及技术面广的问题,这制约了大数据的普及.大数据架构是大数据技术应用的一个非常常见的形式,那么大数据系统架构包含 ...
- 当当推荐数据系统架构实践
首先看一下发展历程,我把它分为三个阶段: 起步期是算法时代,到成长期就属于野蛮生长时代,成熟期以架构为主,架构为王的时代. 先简单看下推荐系统的典型发展史.讲历史,我们按时间顺序讲,一开始是起步期,从 ...
最新文章
- [architecture]-AMBA AXI AHB APB学习总结
- [CSS]CSS:类目之间的竖线问题
- uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案
- 大型主机CICS中间件基础
- How to Set up SSH Tunneling (Port Forwarding)?
- 网络与IO知识扫盲(一):Linux虚拟文件系统,文件描述符,IO重定向
- 【JAVA基础篇】==、equals和hashCode的区别和联系
- spring boot----简单入门
- Docker及K8S使用碎碎记
- Android 系统(200)---Android build.prop参数详解
- 家里蹲太孤单?用 Python 画一只单身狗 | 原力计划
- c++,为什么要引入虚拟继承
- anylogic和java_Anylogic各个版本的功能对比
- 网络通信基础(局域网、广域网、IP地址、端口号、协议、封装、分用)
- python fundamental structure_Data Structures and Algorithms in Python
- 契约锁“7大”签约避坑指南,帮您化解99%的合同签署麻烦
- Photoshop制作墙壁立体雕刻字
- s一般怎么称呼自己的m_英文信的开头和结尾,怎么写才不会出错?
- java生成pdf旋转_Java 设置PDF页面大小/旋转、纸张方向、页边距
- linux系统取消自检,Linux 磁盘自检设置