APP推广合作
联系“鸟哥笔记小乔”
数据仓库系列一:数仓的前世今生
2021-08-31 13:42:43

前言:笔者自2019年硕士毕业,先后任职于两家一线互联网大厂,加上实习经历在数据行业已经摸爬滚打近5年。近来愈发认识到工作中自我沉淀的重要性,既是对自己日常工作的梳理总结,也可以帮助到一些数据新人少走弯路。本篇从数据库引申到数据仓库,用一个生动形象的例子来介绍数据仓库的特性与必要性。了解数据底层可以帮助我们更好的去做数据相关工作,如果本篇文章能帮助到屏幕前困惑的你,会让我很开心。

01  什么是数据库?

当我们说起‘数据仓库’这个词时可能感受并不很直观。相比之下,大家更熟悉的可能是 ‘数据库’这个词。在我们的主题开始之前,我想先着重介绍一下什么是数据库。
 
日常的工作、生活中会产生各种各样的数据,这些海量数据是需要被记录的,因为这些数据中往往蕴含着非常大的价值。我们拿办公最常用的数据处理工具Excel举例,大家日常工作一定少不了和Excel接触,会用Excel对数据进行记录、存储及运算。Excel其实可以被粗略看成一种微型数据库,因为事实上它的确承载了办公者对数据进行记录、存储及运算的需求。然而这种微型数据库存在很多不足:


Excel 能存储的数据量有限,一般以一百万条为界限,超过这个数量级运行起来就很慢且会程序崩溃;


Excel稳定性并不好,我相信大家肯定都有过 Excel卡死然后数据丢失的经历; 


为什么Excel会有诸如此类这些缺点呢?说白了,因为像Excel这种工具它根本不是为了存储数据而生,它的主要功能是对小量级的数据做一些轻量级处理加工,使用门槛低。但也决定了它绝对不可能被工业界应用于大量级数据的记录、存储及运算。


相比被大众广泛使用的Excel,数据库这种东西则显得更加小众和专业化一些。和上者比起来,数据库的优势在于存储的数据量更加庞大、运行起来更加稳定。我们实在无法想象类似淘宝、天猫这种巨大的互联网电商平台,在使用时突然存储数据的工具崩了,将会造成多大量级的损失。


从某种程度来讲,数据库这种工具就是为数据的安全、稳定兜底而存在的。此外,还需要同外部系统工具有良好的交互性,毕竟数据不是存进去就完事,如何应对频繁地增、删、改、查所带来的IO压力,以及在高并发场景下所能承受的数据洪流压力,都是数据库的系统设计者需要考虑的问题。可以说 ,数据库这个方向在整个计算机科学领域内,都占有重要的地位,而数据库方向的研究者也历来是图灵奖的得奖大户。


在如今高度信息化、智能化的社会里,无处不在的信息系统背后都少不了数据库的身影,你在各种APP中的每一次浏览、每一次上传、每一次下载、每一次下单,每一次行为,背后可能都对应着数据库的一条数据变化,是数据库帮我们承载了人类社会越来越多、越来越庞大的数据流量洪峰。

02 数据库or数据仓库?

说到这里,大家应该已经对数据库有了一个基本认知。但是数据库与数据仓库有什么本质区别呢?我先用专业术语来描述一下这两者的区别,数据处理大致可以分成两大类:联机事务处理OLTP(On-line transaction processing )、联机分析处理OLAP(On-Line Analytical Processing)。我们所说的数据库属于OLTP类型,侧重于基本的、日常的事务处理,例如银行交易。而本文的主角数据仓库则属于OLAP类型,侧重于复杂的分析、查询操作,为业务提供决策支持。


当然以上这一大段专业描述,不是数据相关从业者没有数据仓库基础的人基本看不懂。所以接下来我会带大家进入一个具体业务场景,结合实际的例子去讲解数据仓库的前世今生。


在打造业务场景之前,我们先总结一下数据仓库的几个特点,供大家在接下来的业务场景中慢慢体会:


数据仓库的诞生,其本质目的是将两种不同作用的库分开,让数据的采集与计算解耦;


数据仓库的数据产出具有T+1的特性,即今天看到的是昨天的报表(本文主要针对传统离线数仓);


数据仓库起到了对不同平台、不同来源的数据,进行整合的作用;


数据仓库顺应了大数据时代数据爆炸的现状与趋势,以分布式存储与计算的方法,提高了计算机对数据的处理能力;

03 一个栗子

有一个程序猿,我们叫他小明。小明就职于一家电商公司,负责电商系统中很重要的一个子模块—— “订单交易”模块的开发与维护。既然系统中存着大量订单数据,老板自然想根据这些订单数据做一些报表,以便运营和管理者更直观、更方便地探查业务现状。小明根据老板的需求,写了几个SQL脚本,直接查询线上数据导入BI系统,方便老板可以随时随地跟踪、观测公司的业务经营状况。老板很满意,并期望可以将这种数据能力输出到全公司,让下游相关的同学都有自己所需数据可以看。


很快,运营同学也根据自己的需要,提出了相关的数据需求,并且各业务线的运营同学提出的需求千差万别、口径纷繁不一,小明只能硬着头皮开发各种SQL脚本上线。同时,各业务线的数据分析师也通过申请,直连线上数据库进行各种探索、分析查询。大家都根据自己的需求用上了数据,俨然一副 “数字化转型”成功的样子,但是身为后端程序猿的小明却隐隐觉得事情不对劲。


因为最近,越来越多人反馈线上的系统变慢,小明一查后台监控吓了一跳。原来是自己开发的各类报表、以及分析师的SQL查询挤占了本应属于线上库的计算、IO资源,影响了其正常运行。这可不行啊,虽然大家看数据用数据重要,但线上系统的稳定性更重要。舍弃线上系统稳定而去追逐数字化,是本末倒置。于是小明思考,如何在满足大家取数用数的同时,还能兼顾线上系统的稳定运行呢?

 

这样就引出了我们对数据仓库总结的特性一:数据仓库的诞生,其本质目的是将两种不同作用的库分开,让数据的采集与计算解耦。如果数据的采集用一个库,数据的探索、分析查询用另一个库,是不是就能最大程度避免对线上系统的影响呢?于是小明定时将线上库的数据copy一份到另一个拷贝库,以后所有探索、分析查询都在拷贝库进行,那么所有的计算、IO压力都被转嫁到拷贝库了。线上库其实只需要承受一次数据copy带来的IO压力,其他的压力则都烟消云散。


此外,由于数据的 采集与计算 解耦了,所带来的另一个变化是——线上数据库(OLTP)逐渐偏重于针对单条数据的高频操作;而拷贝库(OLAP)则逐渐偏重于大范围的整表扫描、聚合等复杂的分析、查询操作。


想象一下,OLTP最典型的应用场景:热门商品秒杀、火车票抢购、支付宝双十一支付,这些场景都有一个共同特点:在极短的时间内进行极高频次地增、删、改、查。要在与数据流量洪峰交互的同时,还要保证系统稳定性和数据线程安全,但其操作对象仅仅是针对单条数据或多条数据。


而OLAP最典型的应用场景:制作数据报表、供分析师和运营做数据探查、对全量数据做核心挖掘,这些场景则具有另一个共同的特点:低频,但对数据的运算量、吞吐量要求高,可以容忍一定时间的延迟和等待,但每执行一次查询,其操作对象针对的则是十万、百万、千万甚至上亿的数据量级。


事实上,由于应用场景不同,工业界对其不断地更新、优化、迭代,这两种不同工具之间的差异已经愈发明显,就像生物界的物种分化一样,虽然拥有相同的祖先,但在不同环境下逐渐进化成了两个物种。虽然都是用来处理数据的,虽然看上去都能存储结构化的表数据,虽然都支持SQL查询,但在其本质和内核层面,已经完全是两个不同的 “物种” 。

 

话题说回小明的场景,在引入拷贝库以后,虽然解决了挤占线上系统资源的问题,但又带来了另一个问题——数据更新的实时性,这便引出了我们对数据仓库总结的特性二:数据仓库的数据产出具有 T+1的特性,即今天所看到的是昨天的报表(本文仅针对传统离线数仓,实时数仓并不包含在内)。因为数据的采集与计算解耦了,所带来的另一个结果就是——承载计算、IO压力的拷贝库无法实时更新。


从线上库copy数据到拷贝库,一天只发生一次(业内通常采用的做法是copy的时间定为凌晨12点,该时间段内用户热度小,数据copy带来的IO压力能被有效减轻),线上库新增、更新的数据,要等到第二天才能被拷贝库获取,所以在这种模式下,基本是T+1的数据产出模式。


自从大批量复杂的分析、查询操作被从线上库剥离出去之后,线上系统的稳定性得到了强保障,让老板甚是满意。各方源源不断的数据需求被提了过来,小明所负责的数据域开始不仅仅局限于订单交易系统了,这虽然是好事,但与此同时也伴随着更大的挑战。其中面临的一个重要挑战是,新纳入小明负责范围的系统,底层并不都是采用相同的数据库。以订单系统交易为例,数据库采用的是互联网常用的MySQL,而公司的人力资源系统PeopleSoft的底层数据库则是Oracle,除此之外,一些边缘系统的底层还采用了SQLServer、PostgreSQL,甚至在一些特定的业务场景下还会采用MongoDB、Redis这种非关系型NoSQL数据库。


这可让小明感到大为头疼,之前自己只负责订单交易系统,从线上库到拷贝库都是MySQL,所以数据同步很容易。而在不同数据库之间进行数据同步,必须要借助Kettle或Informatica这种ETL工具,这就引出了我们对数据仓库总结的特性三:数据仓库起到了对不同平台、不同来源的数据,进行整合的作用。事实上,在真正的工业界、大中型企业里绝不会仅仅采用一种数据库作为生产工具,一定是多种数据库并存的。这就带来一个问题,底层采用不同数据库的软件系统数据不能互通,造成了严重的数据孤岛现象。导致其本来应该发挥的重要作用被大打折扣,这将会严重地影响企业的数字化转型。所以整合不同平台的数据也是数仓诞生的重要使命之一。

 

在小明负责的拷贝库经过ETL工具整合了越来越多不同平台的数据以后,终于可以名正言顺的称其为数据仓库了。该数仓因为整合了公司各大平台的数据,所以可以进行各种复杂、多维度的统计分析工作,例如:统计各类不同渠道来源的流量数据PV、UV、DAU;结合公司的人力资源结构情况计算ROI;分析买家在不同垂类商品、不同时期下的复购情况等。


随着数据分析、探索工作的不断深入,越来越多的SQL脚本上线,也随着公司的电商业务不断做大,各类数据以指数型的速度爆炸式增长,终于有一天数据仓库承受不住了。


还记得上文我们讲过OLTP和OLAP的区别么?本质上小明所搭建的数据仓库是采用OLTP功能为主的MySQL为基石,大范围大批次的复杂分析、查询操作并不是它的强项。并且MySQL是单机的,更加难以承受日渐扩张的庞大运算量,也就引出了我们对数据仓库总结的特性四:数据仓库顺应了大数据时代 数据爆炸的现状与趋势,以分布式存储与计算的方法,提高了计算机对数据的处理能力。


小明想到市面上很火热的分布式计算系统架构Hadoop能利用廉价普通的PC机搭建集群,实现分布式数据存储和计算。通过查阅资料以后,小明发现Hadoop其中的一个组件Hive能将结构化的数据文件映射为一张数据库表。且能将复杂的Mapreduce程序翻译为简单的SQL语句,支持SQL查询,非常适合用来当作数据仓库(实际上,99%互联网公司的数据仓库是用 Hive搭建的,在很多人眼里 数据仓库 ≈ Hive,这种说法固然片面,但也侧面反映了 Hive的影响力之强大)。


小明在与公司商讨之后,对数据仓库的底层进行了大刀阔斧的改革,经历了种种阵痛,分布式基础架构的 Hive顺利上线,历史数据也成功迁移。至此以后,小明再也不用因为数据的存储、计算能力问题而发愁了。由于小明这段时间在数据搭建方向的出色贡献,其工作岗位也从后端开发工程师调整为全职负责数据的数据仓库工程师,小明的数据生涯之路其实才刚刚开始,不过这都是后话了。(敬请期待第二篇:Kimball建模的灵魂——维度与事实)

04 归纳总结

通过以上这个巨漫长的栗子,不知道大家对数据仓库的认识有没有更加直观深入一丢丢呢。总而言之,我们还是给数据仓库再写一段归纳性的总结作为收尾:

 

数据库与数据仓库,本质上同宗同源,且存续相依,只是因为业务场景需求的不同,逐渐分化成了侧重点不同的两种工具。如果将数据库比做一艘海上快艇,那数据仓库则更像一艘巨型的货运邮轮,前者灵巧、轻便、好掉头且在海上穿梭自如,适合零碎货物的高频转运。而后者笨重、体型庞大、不便于频繁调整航行方向,且巨型邮轮本身的启动、运转就会耗费大量的时间,但是一旦启动完成,其所能容纳承载的货物量远非快艇可比。


数据仓库的本质,其实是大数据时代数据爆炸所衍生的产物。其作为一个大平台,整合各系统无序、杂乱、口径不一的数据,消除数据孤岛、提升可用的数据质量。另一方面借助分布式计算系统架构,让数据的采集与计算解耦,在保障线上系统正常运行的同时,还能有效支撑大批量复杂的分析、查询操作。在当今火热的 “大数据时代”,数据是一座金矿,更是各大互联网巨头赖以生存的血脉,而对于传统公司来讲,想要提高企业效率,数字化转型则是必不可少的。而数据仓库就是这一切所仰仗的基石,少了这块东西,在数据的世界里就如同人被抽走心脏。数据会像静止的血液一般,重要但却无法正常流转。


现在,你对数据仓库的前世今生,了解了么?

-END-

大洛同学
分享到朋友圈
收藏
收藏
评分
评论

综合评分:

我的评分

参与评论(0)

社区交流公约

暂无评论,快来抢沙发吧~
登录后参与评论
发布评论
鸟哥笔记用户社区交流公约

Xinstall 15天会员特权
Xinstall是专业的数据分析服务商,帮企业追踪渠道安装来源、裂变拉新统计、广告流量指导等,广泛应用于广告效果统计、APP地推与CPS/CPA归属统计等方面。
20羽毛
立即兑换
超级nice便签砖
超级超级超级奈斯!
1000羽毛
立即兑换
【新品】办公/外出两用静音充电小电扇
办公桌必备小电扇!
2000羽毛
立即兑换
大洛同学
大洛同学
发表文章41
互联网行业,短视频/直播业务高级数据分析师
确认要消耗 0羽毛购买
数据仓库系列一:数仓的前世今生吗?
考虑一下
很遗憾,羽毛不足
我知道了

我们致力于提供一个高质量内容的交流平台。为落实国家互联网信息办公室“依法管网、依法办网、依法上网”的要求,为完善跟帖评论自律管理,为了保护用户创造的内容、维护开放、真实、专业的平台氛围,我们团队将依据本公约中的条款对注册用户和发布在本平台的内容进行管理。平台鼓励用户创作、发布优质内容,同时也将采取必要措施管理违法、侵权或有其他不良影响的网络信息。


一、根据《网络信息内容生态治理规定》《中华人民共和国未成年人保护法》等法律法规,对以下违法、不良信息或存在危害的行为进行处理。
1. 违反法律法规的信息,主要表现为:
    1)反对宪法所确定的基本原则;
    2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一,损害国家荣誉和利益;
    3)侮辱、滥用英烈形象,歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士的姓名、肖像、名誉、荣誉;
    4)宣扬恐怖主义、极端主义或者煽动实施恐怖活动、极端主义活动;
    5)煽动民族仇恨、民族歧视,破坏民族团结;
    6)破坏国家宗教政策,宣扬邪教和封建迷信;
    7)散布谣言,扰乱社会秩序,破坏社会稳定;
    8)宣扬淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪;
    9)煽动非法集会、结社、游行、示威、聚众扰乱社会秩序;
    10)侮辱或者诽谤他人,侵害他人名誉、隐私和其他合法权益;
    11)通过网络以文字、图片、音视频等形式,对未成年人实施侮辱、诽谤、威胁或者恶意损害未成年人形象进行网络欺凌的;
    12)危害未成年人身心健康的;
    13)含有法律、行政法规禁止的其他内容;


2. 不友善:不尊重用户及其所贡献内容的信息或行为。主要表现为:
    1)轻蔑:贬低、轻视他人及其劳动成果;
    2)诽谤:捏造、散布虚假事实,损害他人名誉;
    3)嘲讽:以比喻、夸张、侮辱性的手法对他人或其行为进行揭露或描述,以此来激怒他人;
    4)挑衅:以不友好的方式激怒他人,意图使对方对自己的言论作出回应,蓄意制造事端;
    5)羞辱:贬低他人的能力、行为、生理或身份特征,让对方难堪;
    6)谩骂:以不文明的语言对他人进行负面评价;
    7)歧视:煽动人群歧视、地域歧视等,针对他人的民族、种族、宗教、性取向、性别、年龄、地域、生理特征等身份或者归类的攻击;
    8)威胁:许诺以不良的后果来迫使他人服从自己的意志;


3. 发布垃圾广告信息:以推广曝光为目的,发布影响用户体验、扰乱本网站秩序的内容,或进行相关行为。主要表现为:
    1)多次发布包含售卖产品、提供服务、宣传推广内容的垃圾广告。包括但不限于以下几种形式:
    2)单个帐号多次发布包含垃圾广告的内容;
    3)多个广告帐号互相配合发布、传播包含垃圾广告的内容;
    4)多次发布包含欺骗性外链的内容,如未注明的淘宝客链接、跳转网站等,诱骗用户点击链接
    5)发布大量包含推广链接、产品、品牌等内容获取搜索引擎中的不正当曝光;
    6)购买或出售帐号之间虚假地互动,发布干扰网站秩序的推广内容及相关交易。
    7)发布包含欺骗性的恶意营销内容,如通过伪造经历、冒充他人等方式进行恶意营销;
    8)使用特殊符号、图片等方式规避垃圾广告内容审核的广告内容。


4. 色情低俗信息,主要表现为:
    1)包含自己或他人性经验的细节描述或露骨的感受描述;
    2)涉及色情段子、两性笑话的低俗内容;
    3)配图、头图中包含庸俗或挑逗性图片的内容;
    4)带有性暗示、性挑逗等易使人产生性联想;
    5)展现血腥、惊悚、残忍等致人身心不适;
    6)炒作绯闻、丑闻、劣迹等;
    7)宣扬低俗、庸俗、媚俗内容。


5. 不实信息,主要表现为:
    1)可能存在事实性错误或者造谣等内容;
    2)存在事实夸大、伪造虚假经历等误导他人的内容;
    3)伪造身份、冒充他人,通过头像、用户名等个人信息暗示自己具有特定身份,或与特定机构或个人存在关联。


6. 传播封建迷信,主要表现为:
    1)找人算命、测字、占卜、解梦、化解厄运、使用迷信方式治病;
    2)求推荐算命看相大师;
    3)针对具体风水等问题进行求助或咨询;
    4)问自己或他人的八字、六爻、星盘、手相、面相、五行缺失,包括通过占卜方法问婚姻、前程、运势,东西宠物丢了能不能找回、取名改名等;


7. 文章标题党,主要表现为:
    1)以各种夸张、猎奇、不合常理的表现手法等行为来诱导用户;
    2)内容与标题之间存在严重不实或者原意扭曲;
    3)使用夸张标题,内容与标题严重不符的。


8.「饭圈」乱象行为,主要表现为:
    1)诱导未成年人应援集资、高额消费、投票打榜
    2)粉丝互撕谩骂、拉踩引战、造谣攻击、人肉搜索、侵犯隐私
    3)鼓动「饭圈」粉丝攀比炫富、奢靡享乐等行为
    4)以号召粉丝、雇用网络水军、「养号」形式刷量控评等行为
    5)通过「蹭热点」、制造话题等形式干扰舆论,影响传播秩序


9. 其他危害行为或内容,主要表现为:
    1)可能引发未成年人模仿不安全行为和违反社会公德行为、诱导未成年人不良嗜好影响未成年人身心健康的;
    2)不当评述自然灾害、重大事故等灾难的;
    3)美化、粉饰侵略战争行为的;
    4)法律、行政法规禁止,或可能对网络生态造成不良影响的其他内容。


二、违规处罚
本网站通过主动发现和接受用户举报两种方式收集违规行为信息。所有有意的降低内容质量、伤害平台氛围及欺凌未成年人或危害未成年人身心健康的行为都是不能容忍的。
当一个用户发布违规内容时,本网站将依据相关用户违规情节严重程度,对帐号进行禁言 1 天、7 天、15 天直至永久禁言或封停账号的处罚。当涉及欺凌未成年人、危害未成年人身心健康、通过作弊手段注册、使用帐号,或者滥用多个帐号发布违规内容时,本网站将加重处罚。


三、申诉
随着平台管理经验的不断丰富,本网站出于维护本网站氛围和秩序的目的,将不断完善本公约。
如果本网站用户对本网站基于本公约规定做出的处理有异议,可以通过「建议反馈」功能向本网站进行反馈。
(规则的最终解释权归属本网站所有)

我知道了
恭喜你~答对了
+5羽毛
下一次认真读哦
成功推荐给其他人
+ 10羽毛
评论成功且进入审核!审核通过后,您将获得10羽毛的奖励。分享本文章给好友阅读最高再得15羽毛~
(羽毛可至 "羽毛精选" 兑换礼品)
好友微信扫一扫
复制链接