使用要求
拆分键的类型必须是 DATE / DATETIME / TIMESTAMP 其中之一。
用户数据的时间的年份与月份是随时间自然增长的,而不是随机。
DRDS 实例的版本必须是 5.1.28-1320920 及其以上的版本。DRDS 版本说明请参考文档版本说明。
优化点
相对于 YYYYMM,YYYYMM_OPT 随着时间线递增能够保持数据在各个 RDS 实例之间的均衡分布。
例如,假设用户在 DRDS 实例上挂了 2 个 RDS 实例,共 16 个分库,通常 DB0~DB7 的分库在一个 RDS 实例上,DB8~DB15 的分布在另外的 RDS 实例上。
那么,下图就是分别使用 YYYYMM 与 YYYYMM_OPT 进行分库时,它们的映射结果(只分库不分表)的对比:
拆分函数
YYYYMM_OPT 的各个 RDS 实例之间的数据均衡性,有助于充分利用各个 RDS 实例的性能。
关于 YYYYMM 与 YYYYMM_OPT 的选择:
如果业务数据的时间按顺序逐渐增大的,并且各个时间点的数据量相差不大,那么适合用 YYYYMM_OPT 实现 RDS 实例之间的数据均衡;
如果业务数据的时间会比较跳跃,数据的时间点出现比较随机,那么适合用 YYYYMM。
路由方式
根据分库键的时间值的年份与月份进行计算哈希值,然后再将哈希值按分库数去取余,完成路由计算
分库分表键的哈希计算过程会根据 DRDS 之下的 RDS 实例的数目适当考虑 RDS 实例间数据的均衡性并选
使用场景
业务需要按年月进行分库分表。
用户希望 DRDS 的各个 RDS 实例的数据量保持相对均衡。
拆分键的时间呈顺序递增(即不是随机的)并且各个月份的数据量相对平均的前提下(例如,每个月的流水日志,它随着月份不断增大,数据不会集中在同一个 RDS 上)。
注意事项
YYYYMM_OPT 不支持对于每一个年月都独立对应一张分表,YYYYMM_OPT 的分库分表必须固定分表数目
当月份经过一个轮回(如 2013-03 是 2012-03 的一个轮回)后,同一个月份就有可能被路由到同一个分库分表,视实际的分表数目而定。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从您的描述来看,您正在讨论的是阿里云分布式关系型数据库服务(DRDS)中的一种特定的分库分表策略,特别是关于如何使用时间相关的拆分键(如YYYYMM
和YYYYMM_OPT
)来优化数据分布和查询性能。下面是对您提到的关键点的总结和解释:
YYYYMM_OPT
这样的优化策略,DRDS实例需要升级到指定版本或更高版本。YYYYMM_OPT
时,不支持为每个月份动态创建新表,而是预先设定好固定的分表数目。综上所述,选择YYYYMM_OPT
还是YYYYMM
作为拆分键,主要取决于业务数据的时间分布特性及对数据均衡性的要求。如果数据生成具有明显的顺序性和时间连续性,且各时间段数据量较为均衡,推荐使用YYYYMM_OPT
以实现更好的资源利用和性能表现。