论坛小助手
2025 年3 月 5 日 18:24
#23
根据文档库中的信息,关于 分区(Partition)与分片(Tablet)的关系 可以总结如下:
分区与 Tablet 的关系
单分区表
单分区表会创建一个 Tablet。因此,在这种情况下,分区和 Tablet 是 1:1 的关系。
多分区表
对于多分区表,每个分区都会创建一个独立的 Tablet。因此,在这种情况下,一张表可以有多个 Tablet,即表和 Tablet 是 1:N 的关系,但每个分区和 Tablet 仍然是 1:1 的关系。
Tablet 的大小及动态调整
默认大小
根据官方文档,Tablet 默认大小为 128MB。这是指 Tablet 内部的数据存储结构(如 MemTable、SSTable 等)在达到一定阈值时会触发转储或合并操作,但并不是说 Tablet 的物理大小固定为 128MB。
动态调整
在某些特定场景下,OceanBase 支持根据宏块负载和数据分布动态调整 Tablet 的大小限制。例如,在批量导入场景中,可以适当增大 Tablet 的大小限制以减少分裂频率;而在高并发查询场景中,可以适当减小 Tablet 的大小限制以提高查询并行度。然而,这种调整通常是通过配置参数或系统优化实现的,并不是 Tablet 的物理大小会自动变化。
自动分裂
当 Tablet 达到一定大小或满足其他条件时,OceanBase 会自动将 Tablet 进行分裂,以确保数据均衡和性能优化。这并不意味着 Tablet 的大小会动态调整,而是通过分裂生成新的 Tablet 来管理更多的数据。
综合理解
分区与 Tablet 的关系 :无论是单分区表还是多分区表,每个分区和 Tablet 都是 1:1 的关系。对于多分区表,表和 Tablet 是 1:N 的关系。
Tablet 的大小 :虽然有默认大小(128MB),但实际大小会根据数据量和系统配置动态变化。动态调整指的是通过配置参数或系统优化来适应不同场景的需求,而不是 Tablet 的物理大小会自动改变。
希望这些信息能帮助您更好地理解分区与 Tablet 的关系以及 Tablet 的大小管理机制。如果还有其他问题,请随时提问。
详情请参考:
OceanBase 术语
集群架构
日志流和副本概述
分区概述
OceanBase 数据库
数据分布
使用 OceanBase 数据库分区表进行水平拆分
1 个赞
淇铭
2025 年3 月 6 日 10:29
#25
分区分裂
用户在 CREATE TABLE 时, 可以使用 SIZE(num) 来创建阈值为 num 的自动分区表,当自动分区表的 tablet 大小超过阈值时,其 tablet 就会进行分裂。
举例:
–创建自动分区表的非分区表,当分区所占磁盘空间大于 1G 时会自动分裂
CREATE TABLE auto_pt1 (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE (c1) SIZE(‘1GB’);
–创建自动分区的分区表,当分区所占磁盘空间大于 10G 时会自动分裂
CREATE TABLE auto_pt2 (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE(c1) SIZE(‘10GB’)(
PARTITION p0 VALUES LESS THAN (30),
PARTITION p1 VALUES LESS THAN (40),
PARTITION p2 VALUES LESS THAN (MAXVALUE)
);
–创建自动分区的非分区表时,可以省略分区键
CREATE TABLE auto_pt2 (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE() SIZE(‘1GB’);
–创建自动分区表时,可以省略SIZE,使用租户默认配置设置分裂阈值
CREATE TABLE auto_pt3 (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE();
–创建非自动分区表
CREATE TABLE non_auto_pt (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE() SIZE(‘unlimited’);
,当 auto_pt1 的 tablet 大小超过 1G 时,其 tablet 就会自动分裂为 2 个新的 tablet,auto_pt1 将会由非分区表转化为具有两个一级分区的一级分区表。然后,每当 auto_pt1 的 tablet 大小超过阈值时,其 tablet 就会进行分裂,生成两个新的一级分区。
在 mysql 模式下,用户同样也可以通过 ALTER TABLE … REORGANIZE PARTITION 语法手动指定某个分区需要分裂,并自行给定分裂位点。例如:
CREATE TABLE t1 (id INT, dob DATE, primary key(id))
PARTITION BY RANGE(id) (
PARTITION p0 VALUES LESS THAN (30),
PARTITION p1 VALUES LESS THAN (40),
PARTITION p2 VALUES LESS THAN (50)
);
–分裂一级分区
ALTER TABLE t1 REORGANIZE PARTITION p2 INTO (
PARTITION p1_2 VALUES LESS THAN (45),
PARTITION p2 VALUES LESS THAN (50)
);
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016858
1 个赞
其实矛盾点就是,既然分区和tablet是1:1的关系,何来tablet大小和分裂之说呢?
因为既然是1:1的关系,分区多少数据,底层承载数据存储的tablet 就要存储多少数据。
淇铭
2025 年3 月 6 日 18:36
#28
对于多分区来说分裂 单分区表其实就是非分区表 你看看上面我的举例还有文档你可以看看