Doris中分区(Partition)与分桶(Bucket)的设计原则是什么?
请解释Apache Doris中两级数据划分——分区(Partition)和分桶(Bucket)的设计思想、区别以及选型原则。什么场景下应该使用Range分区?什么场景使用List分区?
回答
专业代码师
分区(Partition):逻辑上的第一级划分,按时间或枚举值对数据进行切分。
- Range分区:按连续范围切割,如按天/月分区,最常用。可动态增删分区。
- List分区:按离散值列表划分,如按地域(华东/华北/华南)。
- 每个Partition对应一个独立的物理目录,可单独管理(备份/删除/冷热分层)。
分桶(Bucket):第二级划分,在分区内对数据做Hash散列。
- 使用
DISTRIBUTED BY HASH(k1,k2) BUCKETS N。 - 决定了并行查询的粒度——每个Bucket对应一个Tablet。
- Tablet是Doris最小物理存储单元,3副本独立存储。
设计原则:
| 维度 | 分区 | 分桶 |
|---|---|---|
| 目的 | 按时间/范围管理 | 数据散列、并行度 |
| 粒度 | 较大(天/月) | 较小(10~100MB/桶) |
| 常用 | 时间列 | 高基数字段 |
| 影响 | 数据管理、冷热分离 | 查询并发、导入性能 |
建议:分区数<1000,单Bucket 1GB~10GB,总Tablet数<10万。