表分片
GreptimeDB 将一张表分为多个 Region。分区表达式定义每行数据属于哪个 Region,Region 路由则定义当前由哪个 Datanode 持有该 Region。
分区
分区是由一个或多个列上的表达式描述的逻辑行集合。分区布局需要覆盖表的输入域,使每一行都能找到唯一的目标 Region。SQL 语法和支持的表达式参见表分片。
Region
每个分区对应一个 Region。Region ID 是 Frontend、Datanode 和 Metasrv 用于存储和路由的标识。同一张表的多个 Region 可以放在同一个 Datanode 上。
分区和 Region 的关系参见下图:
┌───────┐
│ │
│ Table │
│ │
└───┬───┘
│
Range [Start, end) │ Horizontally Split Data
┌──────────────────┼──────────────────┐
│ │ │
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ │ │ │ │ │
│ Partition │ │ Partition │ │ Partition │
│ │ │ │ │ │
│ P0 │ │ P1 │ │ Px │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
│ │ │
┌───────┼──────────────────┼───────┐ │ Partition 和 Region 是一一对应的
│ │ │ │ │
│ ┌─────▼─────┐ ┌─────▼─────┐ │ ┌─────▼─────┐
│ │ │ │ │ │ │ │
│ │ Region │ │ Region │ │ │ Region │
│ │ │ │ │ │ │ │
│ │ R0 │ │ R1 │ │ │ Ry │
│ └───────────┘ └───────────┘ │ └───────────┘
│ │
└──────────────────────────────────┘
可以放在同一个 Datanode 之中