作家
登录

【漫谈数据仓库】 如何优雅地设计数据分层

作者: 来源: 2017-10-20 15:02:45 阅读 我要评论

埋点日记,线上体系会打入各类日记,这些日记一般以文件的情势保存,我们可以选择用 Flume 准时采取,也可以用用 Spark Streaming 或者 Storm 来及时接入,当然,Kafka 也会是一个症桨?角色。

其它数据源会比较多样性,这和具体的营业相干,不再赘述。

【座谈数据仓库】 若何优雅地设计数据分层

留意: 在这层,理应不是简单的数据接入,而是要推敲必定的数据清洗,比如异常字段的处理、字段定名规范化、时光字段的同一等,一般这些很轻易会被忽视,然则却至关重要。特别是后期我们做各类特点主动生成的时刻,会十分有效。后续会有文┞仿来分享。

2. ODS、DW → App层

这琅绫擎也重要分两种类型:

  1. 每日准时义务型:比如我们典范的日计算义务,天天凌晨算前一天的数据,早上起来看报表。 这种义务经常应用 Hive、Spark 或者生撸 MR 法度榜样来计算,最终结不雅写入 Hive、Hbase、Mysql、Es 或者 Redis 中。
  2. 及时数据:这部分主如果各类及时的体系应用,比如我们的及时推荐、及时用户画像,一般我们会用 Spark Streaming、Storm 或者 Flink 来计算,最后会落入 Es、Hbase 或者 Redis 中。

0x03 举个例子

问:那其实对于同一个数据,这两个过程是串行的?

这里其实就是我们如今大年夜数据技巧发患咀用的一个重要疆场。 我们的数据重要会有两个大年夜的来源:

网上的例子很多,就不列了,只举个笔者早期介入设计的数据分层例子。分析一下当初的设法主意,以及这种设计的缺点。上原图和内容。

当初的设计总共分了 6 层,个中去掉落元数据后,还有5层。下面分析一下当初的一个设计思路。

【座谈数据仓库】 若何优雅地设计数据分层

缓冲层(buffer)

  • 概念:又称为接口层(stage),用于存储天天的增量数据和变革数据,如Canal接收的营业变革日记。
  • 数据生成方法:直接大年夜kafka接收源数据,须要营业表天生成成update,delete,inseret数据,只生成insert数据的营业表,数据直接入明细层
  • 评论辩论筹划:只把canal日记直接入缓冲层,如不雅其它有拉链数据的营业,也入缓冲层。
  • 日记存储方法:应用impala外表,parquet文件格局,便利须要MR处理的数据攫取。
  • 日记删除方法:长久存储,可只存储比来几天的数据。评论辩论筹划:直接长久存储
  • 表schema:一般按天创建分区
  • 库与表定名。库名:buffer,表名:初步推敲格局为:buffer日期营业表名,待定。

明细层(ODS, Operational Data Store,DWD: data warehouse detail)

  • 概念:是数据仓库的细节数据层,是对STAGE层数据进行沉淀,削减了采取的复杂性,同时ODS/DWD的信息模型组织重要遵守企业营业事务处理的情势,将各个专业数据进行集中,明细层跟stage层的粒度一致,属于分析的公共资本
  • 数据生成方法:部分数据直接来自kafka,部分数据为接口层数据与汗青数据合成。

别的,每一层的名字不必太过在意,本身按照爱好就好。

canal日记合成数据的方法待研究。

  • 评论辩论筹划:canal数据的合成方法为:天天把明细层的前天全量数据和昨天新数据合成一个新的数据表,覆盖旧表。同时应用汗青镜像,按周/按月/按年 存储一个汗青镜像到新表。
  • 日记存储方法:直接数据应用impala外表,parquet文件格局,canal合成数据为二次生成数据,建议应用内表,下面几层都是大年夜impala生成的数据,建议都用内表+静态/动态分区。
  • 日记删除方法:长久存储。
  • 表schema:一般按天创建分区,没有时光概念的按具体营业选择分区字段。
  • 库与表定名。库名:ods,表名:初步推敲格局为ods日期营业表名,待定。
  • 旧数据更新方法:直接覆盖

主题层(DM,data market或DWS, data warehouse service)

  • 概念:又称数据集市或宽表。按照营业划分,如流量、订单、用户等,生成字段比较多的宽表,用于供给后续的营业萌芽,OLAP分析,数据分发等。
  • 数据生成方法:由轻度汇总层和明细层数据计算生成。
  • 日记存储方法:应用impala内表,parquet文件格局。
  • 日记删除方法:长久存储。
  • 表schema:一般按天创建分区,没有时光概念的按具体营业选择分区字段。
  • 库与表定名。库名:dm,表名:初步推敲格局为:dm日期营业表名,待定。
  • 旧数据更新方法:直接覆盖

应用层(App)

  • 概念:应用层是根据营业须要,由前面庞层数据统计而出的结不雅,可以直接供给萌芽展示,或导入至Mysql中应用。
  • 数据生成方法:由明细层、轻度汇总层,数据集市层生成,一般请求数据重要来源竽暌冠集市层。
  • 日记存储方法:应用impala内表,parquet文件格局。
  • 日记删除方法:长久存储。
  • 表schema:一般按天创建分区,没有时光概念的按具体营业选择分区字段。
  • 库与表定名。库名:暂定apl,别的根据营业不合,不限制必定要一个库。
  • 旧数据更新方法:直接覆盖。

0x04 若何更优雅一些

前面提到的一种设计其实相对来讲已经很具体了,然则可能层次会有一点多,并且在区分一张表到底该存放在什愦地位的时刻可能还有不小的困惑。我们在这一章里再设计一套数据仓库的分层,同时在前面的基本上加上维表和一些临时表的┞峰酌,来让我们的筹划更优雅一些。


  推荐阅读

  程序员漫画,数据库注入式攻击

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 今天我们看一幅数据库注入式进击的漫画。记得上安闲那会儿,我们的师长教师还让我们用一条语句直接在黉舍官>>>详细阅读


本文标题:【漫谈数据仓库】 如何优雅地设计数据分层

地址:http://www.17bianji.com/lsqh/38085.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)