【Doris基础】Doris中的Tablet详解:核心存储单元的设计与实现

目录

[1 Tablet基础概念](#1 Tablet基础概念)

[1.1 什么是Tablet](#1.1 什么是Tablet)

[1.2 Tablet的核心特性](#1.2 Tablet的核心特性)

[1.3 Tablet与相关概念的关系](#1.3 Tablet与相关概念的关系)

[2 Tablet的架构设计](#2 Tablet的架构设计)

[2.1 Tablet的整体架构](#2.1 Tablet的整体架构)

[2.2 Tablet的存储结构](#2.2 Tablet的存储结构)

[3 Tablet的生命周期管理](#3 Tablet的生命周期管理)

[3.1 Tablet的创建流程](#3.1 Tablet的创建流程)

[3.2 Tablet的数据写入流程](#3.2 Tablet的数据写入流程)

[3.3 Tablet的压缩与合并](#3.3 Tablet的压缩与合并)

[4 Tablet的分布式管理](#4 Tablet的分布式管理)

[4.1 Tablet的副本分布策略](#4.1 Tablet的副本分布策略)

[4.2 Tablet的负载均衡](#4.2 Tablet的负载均衡)

[4.3 Tablet的修复机制](#4.3 Tablet的修复机制)

[5 Tablet的性能优化](#5 Tablet的性能优化)

[5.1 Tablet的分桶与分区分桶](#5.1 Tablet的分桶与分区分桶)

[5.2 Tablet的预分区与动态分区](#5.2 Tablet的预分区与动态分区)

[5.3 Tablet的查询优化](#5.3 Tablet的查询优化)

[6 Tablet的监控与运维](#6 Tablet的监控与运维)

[6.1 Tablet的状态监控](#6.1 Tablet的状态监控)

[6.2 Tablet的常见问题处理](#6.2 Tablet的常见问题处理)

[6.3 Tablet的平衡与迁移](#6.3 Tablet的平衡与迁移)

[7 Tablet的高级特性](#7 Tablet的高级特性)

[7.1 冷热数据分层](#7.1 冷热数据分层)

[7.2 副本属性设置](#7.2 副本属性设置)

[7.3 Tablet的缓存优化](#7.3 Tablet的缓存优化)

[8 总结](#8 总结)


1 Tablet基础概念

1.1 什么是Tablet

在Apache Doris(原百度Palo)分布式数据库中, Tablet是最基本的数据分片和存储单元。它代表了表数据的一个水平分片,类似于传统数据库中的"分区"概念,但具有更丰富的特性和更精细的管理粒度。
Tablet是Doris实现分布式存储和并行计算的基础。每个Tablet通常包含表的一部分数据,这些数据在物理上独立存储,可以分布在不同的Backend节点上,从而实现数据的分布式处理和负载均衡。

1.2 Tablet的核心特性

  • 水平分片:Tablet将大表数据水平切分为多个小块,便于分布式存储和并行处理
  • 副本机制:每个Tablet默认配置多个副本(通常为3个),保证数据高可用
  • 独立管理:Tablet是数据迁移、副本修复、压缩等操作的最小单位
  • 版本控制:每个Tablet通过版本号机制实现数据一致性
  • 高效查询:查询时只需访问相关Tablet,避免全表扫描

1.3 Tablet与相关概念的关系

  • Tablet vs Partition:一个分区(Partition)包含多个Tablet,分区是逻辑概念,Tablet是物理存储单元
  • Tablet vs Replica:一个Tablet有多个副本(Replica),分布在不同的Backend上
  • Tablet vs Segment:在Doris的存储引擎中,一个Tablet由多个Segment文件组成

2 Tablet的架构设计

2.1 Tablet的整体架构

架构说明:

  • 一个表(Table)可以划分为多个分区(Partition),分区通常按照时间或业务维度划分
  • 每个分区包含多个Tablet,Tablet数量决定了查询的并行度
  • 每个Tablet有多个副本(Replica),默认3副本,分布在不同的Backend节点
  • 每个副本由多个Segment文件组成,Segment是实际存储数据的文件格式

2.2 Tablet的存储结构

存储组件说明:
Data:实际存储的数据,组织为Rowset(行集),每个Rowset包含多个Segment
Index:

  • Short Key Index:前缀索引,加速查询
  • Bloom Filter:快速判断数据不存在
  • Zone Map:存储列的最小/最大值,用于过滤
    Metadata:
  • Schema:表结构信息
  • Version:版本信息,用于实现MVCC

3 Tablet的生命周期管理

3.1 Tablet的创建流程

步骤说明:

  • 用户通过FE(Frontend)创建表或添加分区时,FE决定Tablet的分布
  • FE选择多个BE(Backend)节点创建Tablet副本
  • 每个BE节点在本地创建Tablet存储结构
  • FE收集所有副本创建结果后更新元数据
  • Tablet进入可用状态

3.2 Tablet的数据写入流程

写入过程详解:

  • 客户端向FE发送写入请求
  • FE根据分区键确定目标Tablet,并选择主副本(Primary Replica)
  • 数据首先写入主副本的内存Buffer
  • 内存Buffer定期刷盘形成磁盘文件
  • 主副本生成新版本并同步到从副本(Secondary Replicas)
  • 所有副本确认后提交版本,写入完成

3.3 Tablet的压缩与合并

Doris会定期对Tablet中的多个Segment文件进行压缩合并(Compaction),以提高查询性能。

压缩类型:

  • Cumulative Compaction:合并最近的增量数据,频率较高(每小时多次)
  • Base Compaction:合并历史数据,频率较低(每天1-2次)
  • Full Compaction:手动触发的完全合并,重组所有数据

4 Tablet的分布式管理

4.1 Tablet的副本分布策略

Doris采用智能的副本分布策略保证集群的高可用和负载均衡, 分布策略说明:

  • 优先保证副本分布在不同的物理节点
  • 考虑机架、机房级别的容灾
  • 避免副本集中在少数节点导致负载不均衡
  • 遵循用户自定义的Tag分布策略

4.2 Tablet的负载均衡

Doris会定期检查Tablet分布并进行负载均衡,主要考虑以下因素:

  • 各BE节点的磁盘使用率
  • 各BE节点的计算负载
  • Tablet的访问热点
  • 副本分布的均衡性

  • 负载均衡策略可以通过FE配置项调整

    ALTER SYSTEM SET tablet_sched_balance_load_disk_safe_threshold = 0.5;

4.3 Tablet的修复机制

当BE节点宕机或网络隔离时,Doris会自动检测并修复缺失的副本:

修复策略:

  • 优先从同一分区的其他Tablet副本克隆
  • 其次选择同一BE上的其他副本
  • 最后考虑跨BE的副本修复
  • 修复优先级考虑Tablet的重要性(访问频率等)

5 Tablet的性能优化

5.1 Tablet的分桶与分区分桶

合理的分桶(Bucketing)策略对性能至关重要:

复制代码
CREATE TABLE example_db.table_hash
(
    k1 DATE,
    k2 INT,
    k3 SMALLINT,
    v1 VARCHAR(2048),
    v2 DATETIME DEFAULT "2025-05-04 15:36:00"
)
ENGINE=olap
DISTRIBUTED BY HASH(k1, k2, k3) BUCKETS 32
PROPERTIES (
    "replication_num" = "3",
    "storage_medium" = "SSD"
);

分桶设计建议:

  • 每个Tablet大小建议在1-10GB之间
  • 分桶键选择高基数列,避免数据倾斜
  • 分桶数量应为节点数的整数倍
  • 考虑查询模式,使查询能裁剪掉不必要的Tablet

5.2 Tablet的预分区与动态分区

复制代码
CREATE TABLE table_range
(
    k1 DATE,
    k2 INT,
    ...
)
PARTITION BY RANGE(k1)
(
    PARTITION p202501 VALUES LESS THAN ('2025-02-01'),
    PARTITION p202502 VALUES LESS THAN ('2025-03-01')
)
DISTRIBUTED BY HASH(k2) BUCKETS 16
PROPERTIES (
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "MONTH",
    "dynamic_partition.start" = "-12",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "16"
);

分区策略建议:

  • 按时间分区便于冷热数据分离和过期删除
  • 动态分区简化管理,避免手动创建
  • 分区粒度根据数据量决定,通常按天/周/月
  • 结合TTL设置自动过期历史分区

5.3 Tablet的查询优化

查询优化技巧:

  • 确保查询条件包含分区键和分桶键
  • 利用前缀索引加速点查询
  • 合理设置Bloom Filter提高过滤效率
  • 监控Tablet的扫描统计,调整数据分布

6 Tablet的监控与运维

6.1 Tablet的状态监控

通过Doris提供的命令可以查看Tablet状态:

复制代码
-- 查看Tablet分布
SHOW TABLETS FROM example_db.table_name;
-- 查看Tablet详情
SHOW TABLET 10001;
-- 查看数据倾斜情况
SHOW DATA SKEW FROM example_db.table_name;

6.2 Tablet的常见问题处理

  • 问题1:Tablet版本不一致
  • 解决方案:

    -- 查看不一致Tablet
    ADMIN SHOW REPLICA DISTRIBUTION FROM table_name;
    -- 手动触发修复
    ADMIN REPAIR TABLE table_name;

  • 问题2:Tablet副本缺失
  • 解决方案:

    -- 查看压缩状态
    SHOW PROC '/compaction';
    -- 手动触发压缩
    ALTER TABLE table_name COMPACT;

  • 问题3:Tablet压缩卡住
  • 解决方案:

    -- 查看压缩状态
    SHOW PROC '/compaction';
    -- 手动触发压缩
    ALTER TABLE example_db.table_name COMPACT;

6.3 Tablet的平衡与迁移

复制代码
-- 查看平衡状态
SHOW PROC '/cluster_balance';
-- 手动迁移Tablet
ADMIN MOVE REPLICA 10001 FROM "backend1:9050" TO "backend2:9050";

7 Tablet的高级特性

7.1 冷热数据分层

Doris支持将Tablet的不同副本存储在不同的存储介质上:

复制代码
ALTER TABLE .table_name 
MODIFY PARTITION p202501 
SET ("storage_cooldown_ttl" = "7 days", "storage_medium" = "SSD");

7.2 副本属性设置

复制代码
ALTER TABLE example_db.table_name 
MODIFY PARTITION p202501 
SET ("replica_allocation" = "tag.location.zone1:2, tag.location.zone2:1");

7.3 Tablet的缓存优化

复制代码
-- 设置索引缓存
SET GLOBAL index_page_cache_capacity = 1073741824; -- 1GB
-- 设置数据缓存
SET GLOBAL storage_page_cache_capacity = 4294967296; -- 4GB

8 总结

通过深入理解Doris的Tablet机制,可以更好地设计和管理分布式数据库,充分发挥Doris的高性能优势。Tablet作为最核心的存储单元,其设计和管理质量直接决定了整个集群的性能和稳定性。

相关推荐
制造数据与AI践行者老蒋7 天前
智联工坊IoT 数据采集工程实战:2000 万条可复现设备数据生成(WorkBuddy 落地)
doris·制造业数字化·workbuddy·iot 数据采集·模拟数据生成·数据质量校验·dolphinschedul
网络豆11 天前
Apache Maven 鸿蒙 PC 适配全记录:把 JVM 构建工具交付到 HiShell
maven·apache·harmonyos
网络豆11 天前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
网络豆11 天前
Apache HBase 鸿蒙 PC 适配全记录:用 Qt 原生客户端打通 REST 管理与数据读写
apache·hbase·harmonyos
无巧不成书021812 天前
Apache Tomcat 9 下载全指南(Windows,Linux,macOS):版本选型、国内镜像、SHA-512 与 PGP 完整性校验
windows·tomcat·apache
Dream-Y.ocean12 天前
鸿蒙平台 Apache Tomcat 管理控制台适配实战:基于 Electron 壳方案的真实 HTTP 服务器实现
tomcat·apache·harmonyos
betazhou12 天前
Apache seatunel常用配置参数解析说明
apache·seatunnel
凤山老林13 天前
Spring Boot 集成 Apache Kafka Streams 构建流处理应用:状态存储、窗口聚合与
spring boot·kafka·apache
DolphinScheduler社区14 天前
Apache DolphinScheduler 8 月报:权限安全加固,调度补火上线,性能与稳定性持续提升
大数据·安全·开源·apache·任务调度·海豚调度
sbjdhjd14 天前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache