数据仓库
简介
数仓(Data Warehouse)是指用于存储和管理大规模结构化和非结构化数据的中心化数据存储系统。它旨在支持企业的决策制定、数据分析和报告等任务。
数仓的主要目标是将来自不同源头的数据整合到一个统一的数据存储中,以便进行高效的数据分析和查询。
面对大数据的多样性,在存储和处理这些大数据时,我们需要用到各种各样的技术和数仓方法论的支撑。比如HDFS、Hive、SparkSQL、Flink、MPP(Presto、ClickHouse、Doris、Impala),一般用来处理结构化数据,数据湖用来处理结构化、半结构化、非结构化数据。
数据仓库和数据库的区别
数据模型
数据库通常采用面向事务的关系型数据模型,用于存储和管理结构化数据,其中数据按照表、行和列的形式组织。数据仓库则更倾向于采用面向主题的模型,它以主题为中心,将来自多个源系统的数据整合起来,以支持分析和决策制定。
数据类型和结构
数据库主要用于存储结构化数据,例如在表中使用固定的列和数据类型。数据仓库则更加灵活,可以存储多种数据类型,包括结构化、半结构化和非结构化数据,以便更好地支持数据分析和挖掘。
数据处理目的
数据库主要用于事务处理,支持数据的添加、更新和删除等操作。而数据仓库的主要目的是支持数据分析和决策制定,它提供了灵活的查询和分析工具,以帮助用户从存储的数据中提取有价值的信息和洞察。
数据存储方式
数据库通常采用在线事务处理(OLTP)方式进行数据存储,以支持实时的交互式查询和快速的事务处理。数据仓库则通常采用在线分析处理(OLAP)方式进行数据存储,以支持复杂的分析查询、数据挖掘和报表生成。
数据量和性能需求
数据库通常用于存储相对较小的数据集,并且对事务处理的响应时间要求较高。数据仓库则用于存储大规模的数据集,并且对复杂查询和分析操作的性能要求更高。数据仓库通常需要优化查询性能、数据压缩和并行处理等技术,以满足大规模数据的存储和分析需求。
总的来说,数据库主要用于数据的事务处理和操作,而数据仓库主要用于数据分析和决策制定。数据仓库强调数据整合、数据模型的灵活性以及支持复杂分析的能力,而数据库则更注重事务处理和数据一致性。在实践中,数据库和数据仓库通常会相互配合使用,以满足不同的数据管理和使用需求。
业务架构
传统数仓架构

这是比较传统的一种方式,结构或半结构化数据通过离线ETL定期加载到离线数仓,之后通过计算引擎取得结果,供前端使用。这里的离线数仓+计算引擎,通常是使用大型商业数据库来承担,例如Oracle、DB2、Teradata等。
随着数据规模的不断增大,传统数仓方式难以承载海量数据。随着大数据技术的普及,采用大数据技术来承载存储与计算任务。
Lambda架构

将数据发送到消息队列中,实时计算引擎消费队列数据,完成实时数据的增量计算。与此同时,批量处理部分依然存在,实时与批量并行运行。最终由统一的数据服务层合并结果给于前端。一般是以批量处理结果为准,实时结果主要为快速响应。
Kappa架构

Lambda架构,一个比较严重的问题就是需要维护两套逻辑。一部分在批量引擎实现,一部分在流式引擎实现,维护成本很高。此外,对资源消耗也较大。而后面诞生的Kappa架构,正是为了解决上述问题。其在数据需要重新处理或数据变更时,可通过历史数据重新处理来完成。方式是通过上游重放完成(从数据源拉取数据重新计算)。Kappa架构最大的问题是流式重新处理历史的吞吐能力会低于批处理,但这个可以通过增加计算资源来弥补。
混合架构

有时需要综合使用上述架构组合满足实际需求。当然这也必将带来架构的复杂度。用户应根据自身需求,有所取舍。在一般大多数场景下,是可以使用单一架构解决问题。现在很多产品在流批一体、海量、实时性方面也有非常好的表现,可以考虑这种“全能手”解决问题。
Lambda 架构与 Kappa 架构的对比

应用架构
stg数据缓冲层,ods数据贴源层,dw:dwd dws dwt数仓层,ads数据集市层,app应用层。

Last updated