【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作为最核心的存储单元,其设计和管理质量直接决定了整个集群的性能和稳定性。

相关推荐
HashData酷克数据6 小时前
官宣:Apache Cloudberry (Incubating) 2.0.0 发布!
数据库·开源·apache·cloudberry
XMYX-011 小时前
解决 Apache/WAF SSL 证书链不完整导致的 PKIX path building failed 问题
网络协议·apache·ssl
IT·陈寒12 小时前
怎么这么多 StringUtils —— Apache、Spring、Hutool 全面对比
java·spring·apache
cg.family13 小时前
Doirs Routine Load
doris·routine load
喂完待续2 天前
【Big Data】云原生与AI时代的存储基石 Apache Ozone 的技术演进路径
云原生·架构·apache·big data·序列晋升
todoitbo3 天前
时序数据库选型指南:Apache IoTDB快速部署与实战应用
apache·时序数据库·iotdb
IDOlaoluo3 天前
apache-jmeter-5.1.1安装部署与使用教程(小白一看就会)
jmeter·apache
倔强的石头1063 天前
时序数据库选型指南:为何Apache IoTDB成为工业物联网首选
apache·时序数据库·iotdb
wei_shuo3 天前
物联网时序数据存储方案:Apache IoTDB 集群部署全流程 + TimechoDB 优势解读
物联网·apache·iotdb
sanggou3 天前
Apache Doris:重塑湖仓一体架构的高效计算引擎
架构·数据分析·apache