对于分区表数据的存储方式,tikv内部是先划分出region再按照分区键分区,还是按分区创建各自的region?
看官方文档是先分区,再分region
哪里有写?
是 先按分区映射成独立物理对象,再在每个分区内部继续切 Region,不是“先全表统一切 Region,再在 Region 里按分区键分区”。
假设有表:
create table orders (
id bigint,
dt date
)
partition by range columns(dt) (
partition p202401 values less than (‘2024-02-01’),
partition p202402 values less than (‘2024-03-01’),
partition pmax values less than (maxvalue)
);
在存储层更像是:
orders.p202401 是一个物理对象
orders.p202402 是一个物理对象
orders.pmax 是一个物理对象
然后:
p202401 里的数据多了,会分裂出多个 Region
p202402 里的数据多了,也会分裂出多个 Region
pmax 也是一样
所以不是“整个 orders 表共用一套先验 Region 再做分区判断”。
TiKV 始终先按 Key 范围划分 Region,分区表的分区键会编码到 Key 中,让分区成为 Region Key 范围的天然边界,但不会为每个分区 “专属创建” Region
多谢!也就是说如果分区列用HASH分区的话,主键列即便是自增也一样能起到打散热点的效果了。
tikv 可以理解成从 负无穷到正无穷的 key 区间,划分成一个个的region。
tidb 在这个kv的上面构造表结构之类的。
每个表不同的前缀。
可以一个设置:每个表强行一个region。这样就相当于用表前缀为界限分割region
是的,但是分区足够大之后才会region分裂
分区是个逻辑概念,数据存在分片region中。这样就好理解了。
每个分区表实际上各自都有表的id,相当于每个分区是一个表
region可以默认吗
TiKV 不是按分区创建各自独立的 Region,而是先按 Key Range 划分出 Region,再将分区表的不同分区数据映射到对应的 Region 中。
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。
