更新时间:2022-02-22 GMT+08:00
拆分算法概述
支持的拆分算法概览
DDM是一个支持既分库又分表的数据库服务,目前DDM分库函数与分表函数的支持情况如下:
拆分函数 |
描述 |
能否用于分库 |
能否用于分表 |
---|---|---|---|
MOD_HASH |
简单取模 |
是 |
是 |
UNI_HASH |
简单取模 |
是 |
是 |
RIGHT_SHIFT |
数值向右移 |
是 |
是 |
YYYYMM |
按年月哈希 |
是 |
是 |
YYYYDD |
按年日哈希 |
是 |
是 |
YYYYWEEK |
按年周哈希 |
是 |
是 |
HASH |
简单取模 |
是 |
是 |
RANGE |
按范围 |
是 |
否 |
MM |
按月份哈希 |
否 |
是 |
DD |
按日期哈希 |
否 |
是 |
MMDD |
按月日哈希 |
否 |
是 |
WEEK |
按星期哈希 |
否 |
是 |
- 分库的拆分键及分表的拆分键,均不支持为空。
- 在DDM中,一张逻辑表的拆分方式是由拆分函数(包括分片数目与路由算法)与拆分键(包括拆分键的MySQL数据类型)共同定义。
- 当一张逻辑表的分库拆分方式与分表拆分方式不一致时,若SQL查询没有同时带上分库条件与分表条件,则DDM在查询过程会产生全分库扫描或全分表扫描的操作。
DDL拆分函数的数据类型
DDM 的拆分函数对各数据类型对支持情况有所不同,下表显示了 DDM 拆分函数对各种数据类型的支持情况。
拆分算法 |
TINYINT |
SMALLINT |
MEDIUMINT |
INT |
BIGINT |
CHAR |
VARCHAR |
DATE |
DATETIME |
TIMESTAMP |
OTHERS |
---|---|---|---|---|---|---|---|---|---|---|---|
HASH |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
× |
UNI_HASH |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
× |
× |
× |
× |
RIGHT_SHIFT |
√ |
√ |
√ |
√ |
√ |
× |
× |
× |
× |
× |
× |
YYYYDD |
× |
× |
× |
× |
× |
× |
× |
√ |
√ |
√ |
× |
YYYYWEEK |
× |
× |
× |
× |
× |
× |
× |
√ |
√ |
√ |
× |
YYYYMM |
× |
× |
× |
× |
× |
× |
× |
√ |
√ |
√ |
× |
DDM的拆分函数创表语法
DDM兼容MySQL的创表语法,并新增加了partition_options的分库分表关键字。
CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options] partition_options: DBPARTITION BY {{RANGE|HASH|MOD_HASH|RIGHT_SHIFT|YYYYMM|YYYYWEEK|YYYYDD}([column])} [TBPARTITION BY {{HASH|MOD_HASH|UNI_HASH|RIGHT_SHIFT|YYYYMM|YYYYWEEK|YYYYDD}(column)} [TBPARTITIONS num] ]
父主题: DDL