文章目录
- 知识点
- 常见数据分布方式
- 使用
- 表
- 动态分区+Hash分桶
知识点
常见数据分布方式
分布式数据库中常见的数据分布方式。
轮询:Round-Robin,假设分桶数为3,数据按顺序依次写入桶1、桶2、桶3,然后继续循环。
区间:Range,假设分桶数为2,对数据划分范围,在范围1的写入到桶1;在范围2的写入到桶2。
列表:List,直接基于离散的各个取值做数据分布,性别、省份等数据就满足这种离散的特性。每个离散值会映射到一个节点上,多个不同的取值可能也会映射到相同节点上。
哈希:Hash,通过hash函数将数据映射到不同节点上。
业务中可以根据需要选择性使用一种或多种。
使用
表
动态分区+Hash分桶
DROP TABLE IF EXISTS demo.test_1;
CREATE TABLE IF NOT EXISTS demo.test_1 (
id INT NOT NULL,
insert_time DATE NoT NULL,
class VARCHAR(255) NOT NULL,
student VARCHAR(255) NOT NULL,
score VARCHAR(255) NOT NULL
)
UNIQUE KEY(`id`,`insert_time`)
PARTITION BY RANGE(`insert_time`) ()
DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES (
"replication_num" = "3",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.replication_num" ="3",
"dynamic_partition.buckets" = "3",
"dynamic_partition.prefix" = "test",
"dynamic_partition.end" = "3"
);
建表之后可以看到动态分区已经创建,因为dynamic_partition.end设置的是3,所以会自动创建后三天的分区(执行语句时间为:2023年1月16日)
PS:
- 如果表设置的有分区,则插入数据前需要确认分区是否存在,如果不存在则数据会插入失败
- 动态分区无法手动删除,但设置dynamic_partition.start = -3 后会自动删除前N天(周/月/年)分区