更新时间:2024-04-01 GMT+08:00

拆分算法概述

支持的拆分算法概览

DDM是一个支持既分库又分表的数据库服务,目前DDM分库函数与分表函数的支持情况如下:

表1 拆分算法概览表

拆分函数

描述

能否用于分库

能否用于分表

MOD_HASH

简单取模

MOD_HASH_CI

简单取模(大小写不敏感)

HASH

计算CRC32值,再简单取模

RANGE

按范围

RIGHT_SHIFT

数值向右移

YYYYMM

按年月哈希

YYYYDD

按年日哈希

YYYYWEEK

按年周哈希

MM

按月份哈希

DD

按日期哈希

MMDD

按月日哈希

WEEK

按星期哈希

  • 分库的拆分键及分表的拆分键,均不支持为空。
  • 在DDM中,一张逻辑表的拆分方式是由拆分函数(包括分片数目与路由算法)与拆分键(包括拆分键的MySQL数据类型)共同定义。
  • 当一张逻辑表的分库拆分方式与分表拆分方式不一致时,如果SQL查询没有同时带上分库条件与分表条件,则DDM在查询过程会产生全分库扫描或全分表扫描的操作。

DDL拆分函数的数据类型

DDM 的拆分函数对各数据类型对支持情况有所不同,下表显示了DDM 拆分函数对各种数据类型的支持情况。

表2 DDM 拆分函数对各种数据类型的支持情况

拆分算法

TINYINT

SMALLINT

MEDIUMINT

INTEGER

INT

BIGINT

CHAR

VARCHAR

DATE

DATETIME

TIMESTAMP

OTHERS

MOD_HASH

MOD_HASH_CI

HASH

RANGE

RIGHT_SHIFT

YYYYMM

YYYYDD

YYYYWEEK

MM

DD

MMDD

WEEK

√表示支持,×表示不支持。

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]
      ]