OceanBase4.0 中的 tablet 指的是什么?为什么要有tablet这个概念?

在 OceanBase4. 0 中引入了 tablet 的概念,那么 tablet 具体指的是什么呢?

其实tablet这个东西对于熟悉存储或者数据库的同学,应该并不陌生。早在Google发表BigTable的那个年代就已经出现了tablet的身影,就简单指一张表中的一部分数据行,这个含义到今天为止也依然如此。如果大家翻开OceanBase早期0.4版本的开源代码,其实也有tablet这个对象,在OceanBase0.4的版本,是支持数据表自动分裂的,一张表可以被自动分裂成多个tablet,思想和BigTable如出一辙。但是在OceanBase的后期版本,为了和传统数据库兼容,通过用户自定义partition来做数据分割,这个时候tablet的概念就显得有些多余,因此大家在OceanBase3.1的开源版本上,是找不到tablet对象的,能找到的只有partition。

那么为什么在4.0上要重新引入tablet这个概念呢?

主要目的还是希望将partition的概念与tablet的概念做分割,以达到更好的灵活度。在OceanBase看来,partition是对用户可见的一个逻辑概念,比如对一张表做hash分区还是range分区,具体分多少个分区,都是用户需要感知的;而tablet是对用户不可见的一个物理概念。通常来说,对于一张不带任何索引的非分区表,只会有一个独立的partition,而这个partition也会对应到一个独立的tablet。partition会通过表内唯一的partition id进行标识,而tablet也会通过租户内唯一的tablet id进行标识。从partition id到tablet id会有一个映射关系,来方便SQL做路由。但这个映射关系是可能发生变化的,比如说在发生分区交换的时候,就会对partition id到tablet id的映射关系进行修改。(不过目前分区交换这个功能还未实现)

partition和tablet的对应关系是怎样的?

一个partition中可能包含一个或者多个tablet,包含tablet的个数主要取决于局部索引的数量以及表中是否包含lob。对于每个partition,每增加一个局部索引,就会增加一个tablet。如果表中还包含lob对象,那么还会再多两个tablet。

总结

partition是用户感知的逻辑单位,是OceanBase做负载均衡的最小单位,和partition打交道的主要是SQL层。tablet是用户不感知的物理概念,是OceanBase做compaction的最小单位,和tablet打交道的主要是存储层。

7 个赞

提个问题,在我理解中tablet是兼容了数据表水平拆分的能力。但看oceanbase中的设计一个partition中的tablet数量和局部索引数量有关,对于每个partition,每增加一个局部索引,就会增加一个tablet,那岂不是一个tablet还是一个partition完整的数据集吗?

不这逻辑错误了吧。
那这个tablet是心中的局部索引数据,那这就不是完整数据集。
如果是没有任何局部索引,那应该是一个tablet是一个partition完整的数据集

在oceanbase里面是这样,一个tablet里面包含了一套完整的LSM Tree,一套LSM Tree中包含基线sstable、转储sstable、memtable这些。如果一张表没有分区,也没有任何索引,也不包含lob字段,那么这张表就只会有一个tablet。
但如果构建了索引,那么索引表也是一套完整的LSM Tree,所以索引表也会是一个单独的tablet。

1 个赞

终于明白了,其实tablet就是partition的意思,只不过一个是物理上的,一个是逻辑上的。

是的,我也绕了好久

OceanBase 4.0 中的 ‌tablet 是分布式架构中‌数据存储和调度的核心单元,其设计旨在解决传统分区模型的扩展性和灵活性限制。

一、Tablet 的定义与核心特性

  1. ‌物理存储对象
    Tablet 是 OceanBase 中实际存储数据的最小单元,每个 tablet 对应一个数据分区的物理存储实例,支持跨机器迁移(transfer),是数据均衡的基本单位‌。
    单分区表:一个分区对应一个 tablet‌。
    多分区表:每个分区独立创建一个 tablet‌。
    索引表:局部/全局索引的分区也对应独立的 tablet,且局部索引 tablet 与主表 tablet 强制绑定存储(保障物理位置一致性)‌。
    2.与 Partition 的分离
    传统模型问题:早期版本中,partition 同时承担逻辑分区(数据分割)和物理存储的角色,导致数据调度灵活性受限‌。
    引入 Tablet 的意义:将逻辑分区(partition)与物理存储(tablet)解耦,使数据分布和存储调度更灵活‌。

二、引入 Tablet 的必要性

  1. ‌提升分布式扩展性
    自动分裂与迁移:Tablet 支持按数据量动态分裂(如单表数据膨胀时分裂为多个 tablet)‌,并可在集群节点间自动迁移,实现负载均衡‌。
    资源隔离:每个 tablet 独立管理存储和事务,避免不同分区间资源竞争‌。
  2. ‌增强高可用性
    Paxos 副本组:每个 tablet 对应一个独立的 Paxos 选举组(由 3 或 5 副本构成),保障数据强一致性和故障自动恢复能力‌。
    容灾部署:通过多地多中心的 tablet 副本分布,支持城市级容灾(如三地五中心部署)‌。
  3. ‌优化存储管理
    分层存储支持:Tablet 可包含多级 SSTable(如 L0/L1/L2),其中 Major SSTable 作为基线数据,通过合并机制优化存储效率‌。
    细粒度数据操作:以 tablet 为最小单位进行数据备份、恢复和版本管理,降低运维复杂度‌。

三、与历史版本的对比
早期版本(如 0.4):已存在 tablet 概念,但因需兼容传统数据库的 partition 设计,后续版本(如 3.1)移除了 tablet‌。
4.0 版本重构:重新引入 tablet 以解决分区与存储耦合问题,实现更适应云原生场景的分布式架构。

物理跟逻辑partion区别

一个运行概念