更新时间: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