导图社区 doris数据库
Doris数据库是一个基于MPP(Massively Parallel Processing)架构的高性能、实时分析型数据库,它能够提供亚秒级的查询响应时间和高并发的处理能力,适用于海量数据的在线分析处理(OLAP)场景
编辑于2024-04-16 15:34:14doris数据库
Doris数据库是一个基于MPP(Massively Parallel Processing)架构的高性能、实时分析型数据库,它能够提供亚秒级的查询响应时间和高并发的处理能力,适用于海量数据的在线分析处理(OLAP)场景。下面是关于Doris数据库的详细介绍:
湖沧一体架构演进
数据仓库
1)上个世纪80年代兴起的一项技术。随着企业业务发展和大规模计算技术的发展,越来越多的企业使用数据仓库来处理企业产生的数据,发现数据的商业价值。 2)在这个时期,主要是将来自业务系统的多种结构化数据聚合到数据仓库中,利用 MPP 等大规模并发技术对企业的数据进行分析,支撑上层的商业分析和决策。
数据湖阶段
数据湖可以被定义为一种存储各类原始数据的存储库,原始数据包含结构化、半结构化以及非结构化数据。一部分原始数据会经过 ETL 同步到数据集市中,支撑商业分析和决策类应用,另一部分数据将被机器学习和数据科学类应用直接访问
湖仓一体
支持事务。在企业中,数据往往由业务系统提供、并发读取和写入,对事务性要求高。由于一部分业务在读取数据,同时另一部分业务在写入数据,需要保证在并发过程中数据的一致性和正确性。
支持数据模型化和治理,并在数据湖上建设数仓模型,如星型、雪花模型都可以在数据湖上构建,进一步支持上层商业智能类应用,并对接多种BI类工具
支持存算分离,数据湖中有海量数据,如果存储在数仓等系统中会非常昂贵,因此需要存储在对象存储等较便宜的存储系统中。利用湖仓一体这种架构,实现存算分离模式
更好的开放性。支持 Parquet、ORC 等常见的大数据存储格式,也支持 Hudi、Iceberg、DeltaLake 等表格管理存储格式,支持结构化、半结构化和非结构化等数据类型,支持不同类型的工作负载等。
生态工具与组件丰富。围绕数据湖也出现了很多相关工具和组件,如数据目录、开发工具、隐私计算、元数据管理等,其中以 Hudi、Iceberg、DeltaLake 这三种数据湖存储格式最为流行。
发展历史
Doris最初由百度大数据部门研发,原名为Palo,主要用于解决百度凤巢的报表问题。
2017年,Doris正式对外开源。
2018年7月,Doris被百度捐赠给Apache基金会进行孵化。
2022年6月,Doris从Apache孵化器毕业,成为Apache顶级项目(TLP)。
主要功能
亚秒级查询响应:Doris能够快速返回大规模数据集上的查询结果。
高并发处理:支持高并发的点查询和复杂分析场景。
列式存储:数据按列存储,提高压缩比和查询效率。
MPP架构:支持节点间和节点内的并行执行,提升数据处理能力。
向量化查询引擎:提升查询执行效率,减少虚函数调用和锁竞争。
物化视图:自动管理和优化物化视图,提高查询性能。
多源数据目录:支持外部数据源的元信息同步和查询加速。
存储模型:支持Aggregate Key、Unique Key、Duplicate Key等多种数据模型。
系统架构
Doris架构简单,主要由Frontend(FE)和Backend(BE)组成。
Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作,并将请求转发给对应的Backend进行处理。Frontend还负责了Doris集群的负载均衡和故障转移等功能
Leader 和Follower:主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务
Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加 observer 的节点。observer 不参与任何的写入,只参与读取。
Backend(BE),主要负责数据存储、查询计划的执行
BE负责数据存储、查询计划执行等。
支持线性扩展,单集群可支持数百台机器和数十PB存储容量。
使用MySQL协议,兼容MySQL客户端和BI工具。
使用场景
报表分析:适用于企业内部分析师和管理者的报表分析。
实时数仓构建:支持流式数据高效导入和实时聚合。
多源联邦查询:构建跨多个数据源的统一查询入口。
交互式数据分析:与BI工具结合,进行多维度分析。
日志存储和分析:快速存储和分析实时生成的日志数据。
金融数据分析:存储和分析金融相关的大规模数据。
主要特点
高性能:通过MPP架构和向量化查询引擎提供高性能查询。
高可用:通过FE和BE的副本和负载均衡机制实现高可用性。
易于扩展:支持水平扩展,可以通过增加节点来扩展系统。
易于运维:简化的架构减少了系统的运维成本。
兼容性:与MySQL协议的高度兼容,降低了用户的迁移和使用成本。
系统部署
FE的磁盘空间主要用于存储元数据,包括日志和image。通常从几百MB到几个GB不等。
BE的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量* 3(3副本)计算,然后再预留额外40%的空间用作后台compaction以及一些中间数据的存放。
一台机器上可以部署多个BE实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个BE实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)
测试环境也可以仅适用一个BE进行测试。实际生产环境,BE实例数量直接决定了整体查询延迟。
FE节点数据至少为1(1个Follower)。当部署1个Follower和1个Observer时,可以实现读高可用。当部署3个Follower时,可以实现读写高可用(HA)。
Follower的数量必须为奇数,Observer 数量随意。
根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署3个 Follower和1-3个Observer。如果是离线业务,建议部署1个Follower和1-3个Observer。
Broker是用于访问外部数据源(如HDFS)的进程。通常,在每台机器上部署一个 broker实例即可
BE节点需要先在FE中添加,才可加入集群。
基础概念
Doris数据库是一个分布式的列式存储引擎,它的数据模型是基于列式存储的。因此在查询时可以只读取需要的Column数据,而不用读取整个Row数据,这就大大提高了查询性能。
Doris的存储引擎中,用户数据首先被划分成若干个分区(Partition),划分的规则通常是按照用户指定的分区列进行范围划分,比如按时间划分。而在每个分区内,数据被进一步的按照Hash的方式分桶,分桶的规则是要找用户指定的分桶列的值进行Hash后分桶。每个分桶就是一个数据分片(Tablet),也是数据划分的最小逻辑单元。
Tablet之间的数据是没有交集的,独立存储的。Tablet也是数据移动、复制等操作的最小物理存储单元。
Partition可以视为是逻辑上最小的管理单元。数据的导入与删除,都可以或仅能针对一个 Partition 进行
注意事项
时钟同步:确保集群中所有机器的时钟保持一致。
系统资源:合理分配CPU、内存和磁盘资源。
端口配置:确保Doris使用的端口没有被其他服务占用。
存储空间:合理规划存储空间,预留足够的空间用于数据增长。
安全性:定期备份元数据和数据,防止数据丢失。