开发者社区 问答 正文

MM如何使用

使用要求

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

只能作为分表函数使用,但不能作为分库函数。

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

路由方式

根据分库键的时间值的月份数进行取余运算并得到分表下标。

使用场景

MM 适用于按月份数进行分表,分表的表名就是月份数。

使用示例

假设先按 id 对用户进行分库,再需要对 create_time 列按月进行分表,并且每个月能够对应一张物理表,则应该使用如下的建表 DDL:

create table test_mm_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 MM(create_time) tbpartitions 12;
注意事项

按 MM 进行分表,由于一年的月份只有 12 个月,所以各分库的分表数不能超过 12 张分表

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

这段描述是关于阿里云分布式关系型数据库服务(DRDS)中使用月份数分表功能(MM,Month Mode)的详细说明。下面我将根据提供的信息,帮助您更好地理解如何在DRDS中应用这一特性:

使用要求

  1. 拆分键类型:要使用MM分表,您的拆分键必须是日期或时间类型,具体包括DATEDATETIMETIMESTAMP
  2. 功能限制:MM仅能作为分表函数,不能用于分库。这意味着您首先需要确定一个分库策略(如哈希分库),然后在此基础上对每个分库内的数据按月分表。
  3. DRDS版本要求:确保您的DRDS实例版本不低于5.1.28-1320920,以支持MM分表功能。可以通过阿里云官方文档查看和升级您的DRDS版本。

路由方式

MM分表基于时间值的月份数进行取余运算来决定数据的存储位置。例如,如果设置12个分表,则每个月份的数据会被分配到对应的表中,因为一年有12个月,所以通过月份取余可以均匀分布数据。

使用场景

适用于那些需要按月归档或分析数据的场景,比如财务记录、日志数据或者用户行为统计等,这样可以方便地管理和查询特定月份的数据。

使用示例

假设您已经按照用户ID进行了哈希分库,接下来想根据创建时间create_time按月分表,确保每个月的数据存储在一个单独的物理表中,可以使用如下DDL语句创建表:

CREATE TABLE test_mm_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 MM(create_time) TBPARTITIONS 12;

这里,DBPARTITION BY HASH(id)指定了按ID哈希分库,而TBPARTITION BY MM(create_time) TBPARTITIONS 12;则表示按create_time的月份数进行分表,并预设了12个分表。

注意事项

  • 分表数量限制:由于一年只有12个月,因此采用MM分表时,每个分库下的分表总数不能超过12个。
  • 数据分布:确保理解这种分表方式会根据数据的时间属性自动分布,对于跨月的数据查询可能需要涉及多个表的联合查询。

综上所述,MM分表是DRDS中一种高效处理时间序列数据的方法,特别适合需要按月进行数据分析和管理的场景。正确配置后,它能够帮助优化查询性能并简化数据维护工作。

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