Doris核心架构、数据模型与数据划分概述

Apache Doris是一个基于MPP(大规模并行处理)架构的高性能、实时的分析型数据库。其核心架构简洁而高效,主要包含Frontend(FE)Backend(BE)两种进程,共同协作处理数据存储与查询。

Doris核心架构、数据模型与数据划分概述

  • Frontend (FE):作为系统的协调者和入口,负责接收用户连接、解析SQL、生成并优化查询执行计划、管理元数据以及集群调度。FE节点通过类Raft协议实现高可用。
  • Backend (BE):负责数据的存储与查询执行。它存储表数据,并执行FE下发的查询计划片段,如数据扫描、聚合和排序等。

这种前端与后端分离的架构,使得Doris能够轻松实现水平扩展,并具备高可用和负载均衡能力。

数据模型:聚合模型与唯一模型

Doris主要提供了两种数据模型:聚合模型(Aggregate Model)和唯一模型(Unique Model),以适应不同的业务场景。

聚合模型是Doris的经典模型,特别适合有预聚合需求的报表分析。在此模型下,用户可以定义维度列(Key)和指标列(Value),并为指标列指定聚合函数(如SUM、MAX、MIN等)。当导入的数据具有相同维度时,Doris会自动对指标列进行聚合,这极大地提升了查询性能。

用户ID (Key) 日期 (Key) 城市 (Key) 销售额 (SUM Value) 最后访问时间 (REPLACE Value)
1001 2023-10-01 北京 150 10:00
1001 2023-10-01 北京 50 14:00

上表数据导入后,在Doris内部会聚合成一行:(1001, 2023-10-01, 北京, 200, 14:00)

唯一模型则更适用于需要按主键唯一更新数据的场景,可以看作是聚合模型的一个特例,它通过使用REPLACE聚合类型来实现,保证同一主键下仅保留最新的数据行。

数据划分:分区与分桶

为了高效管理海量数据,Doris采用了两级数据划分策略:分区(Partitioning)和分桶(Bucketing)。

  • 分区(Partition):通常按照日期范围进行划分,例如按天或按月分区。分区是实现分区裁剪的基础,在查询时只扫描相关分区的数据,避免全表扫描,从而显著提升查询效率。
  • 分桶(Bucket):在分区内,数据通过哈希分桶策略被进一步划分到多个更小的数据单元(Tablet)中。分桶列通常是查询中高频使用的维度列。合理的分桶设计可以实现高效的并行计算和数据均衡。

这种“分区内分桶”的机制,使得每个Tablet成为数据移动、复制和计算的最小物理单元,是实现高并发查询和水平扩展的关键。

数据组织与索引

Doris在数据文件层面采用了列式存储格式,这非常有利于分析查询,因为它可以在查询时只读取所需的列,减少I/O。每个Tablet由多个数据段(Segment)组成,而每个Segment内部又按列(Column)存储。

为了加速数据查找,Doris提供了丰富的索引:

  • 前缀索引:在数据文件中,每1024行数据构成一个数据块,并对应一条前缀索引项。该索引基于表中排序列的前36个字节构建,能够快速定位到数据块。
  • ZoneMap索引:记录了每个数据块内各列的MIN和MAX值,对于范围查询非常有效。
  • Bloom Filter索引:适用于对高基数列(如用户ID)进行等值查询,能够快速判断数据块中是否包含目标值。

数据导入与物化视图

Doris支持多种灵活的数据导入方式,包括流式的Routine Load(从Kafka导入)、批量的Broker Load(从HDFS等外部存储导入)以及INSERT INTO等,以满足不同实时性和数据源的需求。

Doris的物化视图(Materialized View)功能是其一大亮点。用户可以为基表预先定义一个或多个物化视图,这些视图存储了按照不同维度聚合计算的结果。查询时,优化器会自动判断是否可以将查询路由到匹配的物化视图上,从而实现对亿级数据的亚秒级响应。

内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。

本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/134437.html

(0)
上一篇 2025年11月27日 上午1:33
下一篇 2025年11月27日 上午1:34
联系我们
关注微信
关注微信
分享本页
返回顶部