基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

在 Doris 中,什么是 Tablet(数据分片)?它与 Partition(分区)、Bucket(分桶)之间的物理与逻辑关系是怎样的?

在 Apache Doris 中,数据的分布采用了两级分区(Two-Tier Partitioning)机制,即Partition(分区)Bucket(分桶)。而 Tablet(数据分片) 则是这一机制下产生的最终物理产物。

为了让你清晰地理解它们,我们可以从“定义”和“关系”两个方面来拆解。


一、 什么是 Tablet(数据分片)?

Tablet 是 Doris 中最小的物理存储单元、数据管理单元和副本(Replica)管理的单元。

  • 物理载体:Doris 并没有所谓的“表级文件”或“分区级文件”。你存入 Doris 的每一条数据,最终都会真实地保存在某一个 Tablet 中。一个 Tablet 在底层对应 BE(Backend)节点磁盘上的一个或多个数据文件(Segment 文件)。
  • 高可用单位:Doris 的多副本机制(通常是 3 副本)是作用在 Tablet 级别的。Doris 会将一个 Tablet 的 3 个副本分散存储在不同的 BE 节点上,以保证数据的高可用。
  • 扩容与均衡单位:当集群增加新的 BE 节点时,Doris 会自动将部分旧节点上的 Tablet 迁移到新节点上,实现存储和计算的负载均衡。

二、 Partition、Bucket 与 Tablet 的逻辑与物理关系

在 Doris 中,这三者的关系可以用一个公式来概括:
1 个 Tablet = 1 个特定的 Partition + 1 个特定的 Bucket

1. 逻辑关系:从宏观到微观

从逻辑层面上看,它们是包含与被包含的层级关系:

  • Table(表):最高逻辑层级。
  • Partition(分区)第一级划分(逻辑层面)。
    • 通常按照时间连续的值范围(Range/List)进行划分。
    • 作用:方便数据的生命周期管理(例如按天建分区,直接 Drop 掉过期数据的分区,非常轻量级);在查询时可以通过分区裁剪(Partition Pruning)快速过滤掉不相关的数据。
  • Bucket(分桶)第二级划分(逻辑机制)。
    • 在每个 Partition 内部,数据会根据指定的分桶列(通常是主键或高基数列)的 Hash 值再次被打散,分成多个 Bucket。
    • 作用:将数据均匀地分布到集群的各个机器上,避免数据倾斜,并在查询时实现高度并发(多个机器同时处理各自 Bucket 里的数据)。

2. 物理关系:Tablet 是交集的实体

在 DDL 建表语句中,我们只能定义 Partition 和 Bucket,看不到 Tablet 这个词。但在物理层面,Partition 和 Bucket 的交集,就生成了 Tablet。

你可以这样理解它们的物理生成过程:

  1. 你建立了一张表,按“月”分了 12 个 Partition(1月到12月)。
  2. 你规定每个 Partition 内部按照用户 ID 哈希分成 10 个 Bucket(0号到9号桶)。
  3. 在物理层面上,Doris 会在集群中生成 12 × 10 = 120Tablet
  4. 如果你设置了 3 副本,那么集群磁盘上总共会有 120 × 3 = 360Tablet 副本

3. 数据写入的路由过程(物理映射)

当一条数据(例如:时间 2023-10-01,用户 ID 9527)写入 Doris 时:

  1. 第一步(找 Partition):Doris 检查时间 2023-10-01,决定把数据放入 “10月分区”
  2. 第二步(找 Bucket):Doris 对用户 ID 9527 进行 Hash 计算,然后对 10 取模,假设结果是 “3号桶”
  3. 第三步(落入 Tablet):数据最终被写入到了属于 [10月分区 - 3号桶] 这个特定的 Tablet 中。
  4. 第四步(多副本同步):这个 Tablet 的数据会被同步到它对应的 3 个 BE 节点副本上。

三、 通俗的类比

为了加深理解,我们用“图书馆”来打个比方:

  • Table(表) = 整个图书馆
  • Partition(分区) = 图书馆里的楼层或房间(例如:2023年出版的书放1楼,2024年的放2楼)。这是为了按年份快速找书,或者年底直接清空某一层楼的旧书。
  • Bucket(分桶规则) = 房间里的书架编号(例如:按书名的拼音首字母,均匀分配到 10 个书架上)。这是为了让找书的人(CPU)可以分散开,大家同时去不同的书架找书,提高效率。
  • Tablet(数据分片) = 真实存在的某个木头书架(例如:“1楼的3号书架”就是一个物理存在的 Tablet)。如果1楼太挤了,管理员(Doris 系统)会把“1楼的3号书架”整个搬到另一个空旷的房间(BE 节点扩容时的 Tablet 迁移)。

总结

  • Partition 决定了数据在逻辑上的边界(按范围裁剪)。
  • Bucket 决定了数据在计算上的并行度(按 Hash 打散)。
  • Tablet 是前两者结合后在底层磁盘上的物理化身,是 Doris 分布式调度的基石。
00:00
00:00