跳到主要内容
版本:0.9

表分片

对于任何分布式数据库来说,数据的分片都是必不可少的。本文将描述 GreptimeDB 中的表数据如何进行分片。

分区

有关创建分区表的语法,请参阅用户指南中的表分片部分。

Region

在创建分区后,表中的数据被逻辑上分割。你可能会问:"在 GreptimeDB 中,被逻辑上分区的数据是如何存储的?" 答案是保存在 Region 当中。

每个 Region 对应一个分区,并保存分区的数据。所有的 Region 分布在各个 Datanode 之中。我们的 Metasrv 会根据 Datanode 的状态在它们之间自动移动 Region。此外,Metasrv 还可以根据数据量或访问模式拆分或合并 Region

分区和Region的关系参见下图:

                       ┌───────┐
│ │
│ Table │
│ │
└───┬───┘

Range [Start, end) │ Horizontally Split Data
┌──────────────────┼──────────────────┐
│ │ │
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ │ │ │ │ │
│ Partition │ │ Partition │ │ Partition │
│ │ │ │ │ │
│ P0 │ │ P1 │ │ Px │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
│ │ │
┌───────┼──────────────────┼───────┐ │ Partition 和 Region 是一一对应的
│ │ │ │ │
│ ┌─────▼─────┐ ┌─────▼─────┐ │ ┌─────▼─────┐
│ │ │ │ │ │ │ │
│ │ Region │ │ Region │ │ │ Region │
│ │ │ │ │ │ │ │
│ │ R0 │ │ R1 │ │ │ Ry │
│ └───────────┘ └───────────┘ │ └───────────┘
│ │
└──────────────────────────────────┘
可以放在同一个 Datanode 之中