使用要求
拆分键的类型必须是 DATE / DATETIME / TIMESTAMP 其中之一。
只能作为分表函数使用,但不能作为分库函数。
DRDS 实例的版本必须是 5.1.28-1320920 及其以上的版本。DRDS 版本说明请参考文档版本说明。
路由方式
根据分库键的时间值所对应的当月的日期进行取余运算并得到分表下标。
使用场景
DD 适用于按一个月的天数(即日期)进行分表,分表的表名的下标就是一个月中的第某天,一个月最多有31天。
使用示例
假设先按 id 对用户进行分库,再需要对 create_time 列按日进行分表,并要求每天都对应一张物理表,则应该使用如下的建表 DDL:
create table test_dd_tb (
id int,
name varchar(30) DEFAULT NULL,
create_time datetime DEFAULT NULL,
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by HASH(id)
tbpartition by DD(create_time) tbpartitions 31;
注意事项
由于一个月最多是 31 天,当按 DD 进行分表时,所以各个分库的分表数目不能超过 31 张。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您提到的是阿里云分布式关系型数据库(DRDS,Distributed Relational Database Service)中的一种分表策略——按日期分表(DD, Date Distribution)。这种策略特别适用于那些需要根据时间序列数据,尤其是按天进行数据切分和管理的场景。下面是对您提供的信息的一个总结和补充说明:
DD 分表通过将分表键(如 create_time)对应日期的天数取余运算来决定数据落入哪个物理表。这种方式确保了每天的数据能够均匀分布到不同的表中。
适合于日志系统、交易记录、用户行为分析等场景,其中数据量随时间累积且通常按天查询或统计最为频繁。
假设您的业务需要根据用户ID分库,并希望每天的数据存储在单独的表中,可以采用如下DDL语句创建表:
CREATE TABLE test_dd_tb (
id INT,
name VARCHAR(30) DEFAULT NULL,
create_time DATETIME DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
DBPARTITION BY HASH(id)
TBPARTITION BY DD(create_time) TBPARTITIONS 31;
这里,DBPARTITION BY HASH(id)
指定了根据用户ID进行分库,而TBPARTITION BY DD(create_time) TBPARTITIONS 31
则表示根据create_time
字段按日分表,最多创建31个分表,对应一个月中的每一天。
综上所述,DD 分表策略在处理时间序列数据时非常有效,但实施前应充分评估业务需求、数据规模及查询模式,以确保方案的适用性和效率。