介绍
今天分享一下大数据领域的数仓,随着系统的增多,数量大的庞大,传统的数据库难以满足需求,于是出现了系统之间纵横交错的调用,链路变得十分复杂,并且到了一定的数据量,关系型数据库难以支撑各种应用,这时候势必会引入数据仓库,在进入正题前,我们先认识一下数仓。
数仓顾名思义就是存放数据的仓库,那MySQL不也是存放数据的地方吗?没错,只是数仓比MySQL大得多,数仓存的数据来源更广,数据类型更加多,MySQL只是存储关系型的数据库,MySQL用于OLTP(联机事务处理),而金融,政务等业务需要需要严格的事物控制,为了保证数据的原子性,而数仓是用于OLAP(联机分析处理),例如分析,报表之类的业务。
下面是数仓的架构图,包含了离线数仓和实时数仓。
数仓分类
数仓分为实时数仓,离线数仓,实时离线一体化。
离线数仓
离线数仓就是数据的处理是离线的,所以这也就决定了具有T+1特征,不能实时地得到数据并对数据进行使用,需要一定的时间时间间隔,这个时间间隔需要我们根据业务去设计,一般为一天,即当天产生的数据只能第二天才能使用,所以我们在设计数仓的时候要根据具体的业务和数据来定,比如每天要统计前一天的销售额,网站的点击量这些,再比如对于智慧园区,智慧城市项目,需要统计前一天或者前几天的车流量情况,然后判断未来几天的车流情况。
实时数仓
实时数仓就是对数据的实时性要求比较高,所以是即时运算的,它的数据来源和离线是一样的,数据出来后,一条走了实时,一条走了离线(Lambda架构),相比于离线数仓,实时数仓的难度就要大得多,因为离线数仓的数据是全量数据,所以对数据的计算是批计算,而实时数仓的数据就像流水一样源源不断地进来,所以要求就更高,对数据的运算和把握就更大。在业务场景上,比如大屏分析,需要实时地对数据进行处理后展示,还有一些下游服务需要使用这些数据。
实时离线一体化
在上面地架构图中,实时和离线走了两条链路,所以需要维护两套代码,开发成本就会变大,但是好处是比较稳,也是大部分企业所采用的,数仓一体化就是实时和离线走一条链路,只需要维护一套代码即可,但是难度比较大,当前市面上成功的案例也不是很多,所以为了求稳,走传统的架构是没错的。
数据来源
数据来源各个系统都不一样,对于社交类软件,数据来源可能来自于用户行为,通过前端埋点的方式收集用户行为信息,还有用户在系统中的产生的各种数据,一些工业项目,数据来源可能来自于硬件设备收集的数据,有一些是直接来源于数据库,等等。
数据流向
为了解耦和业务的扩展性,我们会将来自数据库,IOT,前端埋点,第三方API等的数据发送到Kafka中,然后实时链路和离线链路分别消费kafka中的数据,实时这边Flink或者SparkStreaming会消费Kafka的数据,然后进行一系列的运算或转换后将数据写入到关系型数据库,MPP数据库,搜索引擎或者缓存中,以提供业务,展示或者分析使用,而离线那边会将Kafka中的数据采集到HDFS中,通过Hive进行数仓建模,然后根据需求再对数据进行分析或者导入到其他数据库中进行使用。
总结
上面只是简单地介绍了数仓地一些基本知识,数仓的分类,数据来源和数据流向,能够对数仓从整体上有一个认识,并没有从数仓的建模,技术等方面去说,后续再从数仓的各个组件和技术框架去说。
感谢你的观看,我们下期见,如果本文有描述不正确或不合理的地方,还请你提出宝贵的意见,我们一起在学习中成长,进步!