开发者社区 问答 正文

YYYYMM如何使用

使用要求

拆分键的类型必须是 DATE / DATETIME / TIMESTAMP 其中之一。

DRDS 实例的版本必须是 5.1.28-1320920 及其以上的版本。DRDS 版本说明请参考文档版本说明。

路由方式

根据拆分键的时间值的年份与月份进行计算哈希值,然后再按分库数去取余,完成路由计算。

例如:YYYYMM(‘2012-12-31 12:12:12’) 等价于 (2012 * 12 + 12) % D, (D是分库数目)。

使用场景

适合于需要按年份与月份进行分库的场景,建议该函数会与 tbpartition YYYYMM(ShardKey) 联合使用。

例如,假设用户的 DRDS 里已经分了 8 个物理库,现业务有如下的场景:

一个业务想按年月进行分库;
要求是同一个月的数据能落在同一张分表,并且两年以内的每个月都单独对应一张分表;
查询时带上分库分表键后能直接将查询落在某个物理分库的某个物理分表。
那么, 用户这时就可以使用 YYYYMM 的分库函数进行解决:业务要求两年以内的每个月都对应一张分表(就是一个月一张表),由于一年有 12 个月,所以至少需要创建 24 个物理分表才能满足用户的场景,而用户的 DRDS 有 8 个分库,所以每个分库应该建 3 张物理分表。因此,与用户业务场景应该对应的 DDL 应该是:

    create table test_yyyymm_tb (    
        id int,
        name varchar(30) DEFAULT NULL,  
        create_time datetime DEFAULT NULL,
        primary key(id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    dbpartition by YYYYMM(create_time)
    tbpartition by YYYYMM(create_time) tbpartitions 3;                
注意事项

YYYYMM 不支持对于每一个年月都独立对应一张分表,YYYYMM 的分库分表必须固定分表数目。

当月份经过一个轮回(如 2013-03 是 2012-03 的一个轮回)后,同一个月份就有可能被路由到同一个分库分表,视实际的分表数目而定。

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

根据您的描述,您正在了解如何在阿里云分布式关系型数据库服务(DRDS)中使用YYYYMM函数进行时间相关的分库分表操作。下面是对您提供信息的总结和补充说明:

使用要求

  • 拆分键类型:确保用于分片的字段是 DATE、DATETIME 或 TIMESTAMP 类型之一。
  • DRDS 版本:确认您的DRDS实例版本至少为5.1.28-1320920,以支持YYYYMM函数。可以通过阿里云控制台查看并升级DRDS版本。

路由方式

YYYYMM函数基于时间值(年月)计算哈希值,并通过分库数取余来决定数据的存储位置。例如,对于日期'2012-12-31 12:12:12',其路由计算简化为(2012 * 12 + 12) % D,其中D代表分库数量。

使用场景

适用于需要按年月维度分库分表的业务场景,比如财务系统、日志系统等,这些场景往往要求特定月份的数据聚合在一起,便于管理和查询。

实践案例

假设您有8个物理库,且业务需求是两年内每个月份的数据分别存储在不同的表中,每个库需创建3张物理分表(因为24个月除以8个库等于每库3张表)。对应的DDL语句示例如您所给,创建了一个名为test_yyyymm_tb的表,利用dbpartition by YYYYMM(create_time)进行分库,同时用tbpartition by YYYYMM(create_time) tbpartitions 3;定义了每个库内的3个分表,均按照创建时间的年月进行划分。

注意事项

  • 固定分表数目:使用YYYYMM时,预先确定的分表数量是固定的,不支持动态调整到每一个年月对应一张表。
  • 轮回效应:当时间跨过一个周期(如两年后相同的月份),由于分表数量固定,相同月份的数据可能被路由到与之前相同的分库或分表中,具体取决于分表的数量和分布情况。
  • 规划与管理:在设计阶段就需要仔细规划分库分表策略,考虑到数据增长趋势,避免某个时间段的数据过于集中,影响性能。

综上所述,YYYYMM函数是解决按时间维度分库分表需求的有效工具,但使用时需注意其限制条件和潜在的循环路由问题,合理规划以满足业务的扩展性和性能需求。

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