开发者社区 问答 正文

YYYYMM_OPT如何使用

使用要求

拆分键的类型必须是 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 的一个轮回)后,同一个月份就有可能被路由到同一个分库分表,视实际的分表数目而定。

展开
收起
猫饭先生 2017-10-30 11:42:07 1948 分享 版权
阿里云 AI 助理回答

从您的描述来看,您正在讨论的是阿里云分布式关系型数据库服务(DRDS)中的一种特定的分库分表策略,特别是关于如何使用时间相关的拆分键(如YYYYMMYYYYMM_OPT)来优化数据分布和查询性能。下面是对您提到的关键点的总结和解释:

拆分键类型要求

  • DATE / DATETIME / TIMESTAMP:DRDS在进行时间相关拆分时,要求拆分键的数据类型必须是这三种之一,确保能够精确地根据时间维度进行数据划分。

DRDS版本需求

  • 版本5.1.28-1320920及以上:为了支持更高级的分片功能,包括YYYYMM_OPT这样的优化策略,DRDS实例需要升级到指定版本或更高版本。

优化点说明

  • YYYYMM_OPT与YYYYMM的区别
    • YYYYMM:直接基于年月进行哈希计算并路由到对应的分库,可能导致某些月份数据量大时,集中于少数几个分库,影响均衡性。
    • YYYYMM_OPT:通过一种优化算法,使得随时间递增的数据能更好地分布在各个RDS实例上,即使在数据量相对均匀的情况下也能保持较好的负载均衡。

使用场景

  • 按年月分库分表:适用于那些业务数据自然按照时间序列增长,并且希望每个RDS实例承载的数据量大致相等的场景。
  • 数据量均衡需求:当用户期望DRDS管理下的所有RDS实例能够均衡地存储和处理数据,避免数据倾斜导致的性能瓶颈。

路由方式

  • 基于时间值的年月计算哈希值,然后根据分库数取余数来决定数据的归属分库。这种方式确保了数据的均匀分布,同时考虑到了RDS实例间的平衡。

注意事项

  • 固定分表数目:使用YYYYMM_OPT时,不支持为每个月份动态创建新表,而是预先设定好固定的分表数目。
  • 轮回效应:由于采用周期性的月份作为拆分依据,在经过一定周期后(如一年),相同月份的数据可能被路由到相同的分库,但具体取决于分库和分表的数量配置。

综上所述,选择YYYYMM_OPT还是YYYYMM作为拆分键,主要取决于业务数据的时间分布特性及对数据均衡性的要求。如果数据生成具有明显的顺序性和时间连续性,且各时间段数据量较为均衡,推荐使用YYYYMM_OPT以实现更好的资源利用和性能表现。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答