华为云-RDS&DDM常见用法

一,创建表

1、创建分库分表

假设使用HASH的拆分库算法拆分表算法为MOD_HASH,例如:

CREATE TABLE tbpartition_tbl (
id int NOT NULL AUTO INCREMENT COMMENT '主键id',
name varchar (128),
PRIMARY KEY(1d)
)ENGINE-INNODB DEFAULT CHARSET-utf8 COLLATE-utf8_unicode_ci
DBPARTTTION BY HASH(id)
TBPARTITION BY mod_hash (name) tbpartitions 8;
2、分库不分表

假设使用HASH的拆分库算法,例如

CREATE TABLE tbpartition_tbl (
id int NOT NULL AUTO INCREMENT COMMENT '主键id',
name varchar (128),
PRIMARY KEY(1d)
)ENGINE-INNODB DEFAULT CHARSET-utf8 COLLATE-utf8_unicode_ci
DBPARTTTION BY HASH(id)
3、广播表

在业务数据库中,存在一些数据量不大,更新频率低,但常常需要用来做关联查询的表。为了支持这类表与拆分表进行join操作,DDM设计了一类“广播表”,具有以下特点:

  • 广播表在各个分片中数据一致。数据插入、更新与删除会实时在每一个分片中执行一次。
  • 对广播表的查询,仅在一个分片中执行。
  • 任何表都可以与广播表进行join操作。
  • 使用广播Hint的前提是需要确保表的存在性

例如:

CREATE TABLE broadcast_tbl(
id int NOT NULL AUTO INCREMENT COMMENT '主键id',
name varchar (128),
PRIMARY KEY(1d)
)ENGINE-INNODB DEFAULT CHARSET-utf8 COLLATE-utf8_unicode_ci
BROADCAST:
4、单表

DDM管理控制台不提供单表创建操作,用户可以通过Mysql客户端或者应用程序连接到DDM实例后自行创建。如果一张表的数据,数据量预估在1000万条以下,且没有与其他拆分表关联查询的需求,建议将其设置为单表类型,存储再默认分片中。

例如:

CREATE TABLE single (
id int NOT NULL AUTO INCREMENT COMMENT '主键id',
name varchar (128),
PRIMARY KEY(1d)
);

二、拆分算法概述

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

拆分算法

TINY

INT

SM

ALL

INT

MED

IUM

INT

INT

BIG

INT

CHAR

VAR

CHAR

DATE

DATE

TIME

TIME
STAMP

OTHE

RS

HASH
UNI_HASH

RIGHT_

SHIFT

YYYYDD
YYYYWEEK
YYYYMM

 

 

 

拆分算法概览表

拆分函数描述能否用于分库能否用于分表
MOD_HASH简单取模
UNI_HASH简单取模
RIGHT_SHIFT数值向右移
YYYYMM按年月哈希
YYYYDD按日哈希
YYYYWEEK按周哈希
HASH简单取模
RANGE按范围
MM按月份哈希
DD按日期哈希f否
MMDD按月日哈希
WEEK按星期哈希

 注意:

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

三、SQL大类限制

  • 不支持临时表;
  • 不支持外键、视图、游标、触发器及存储过程:
  • 不支持用户自定义数据类型及自定义函数;
  • 不支持“IF”,“WHILE” 等流程控制类语句:
  • 不支持 BEGIN···END、LOOP.··END LOOP、REPEAT···UNTIL···END REPEAT.
  • WHILE···DO···END WHILE 等复合语句。
  • 拆分表和广播表不支持外键;
  • 不支持修改分片字段(拆分键);
  • 不支持 ALTER DATABASE Syntax;
  • 不支持从另一张表创建新的拆分表、广播表;
  • create table 不支持 generated column 语法;
  • 不支持 ALTER 命令修改拆分键和全局序列字段:
  • 不支持创建 TEMPORARY 类型的拆分表、广播表;
  • 逻辑表名只允许字母(不区分大小写)数字以及下划线
  • CREATE TABLE tbl name LIKE old tbl name 不支持:
  • CREATE TABLE tbl name SELECT statement 不支持:
  • 不支持 insert into on duplicate key update 更新拆分键值;
  • 暂不支持跨 Schema 的 DDL,例如, CREATE TABLE db name.tbl name(.·);
  • 使用 MySOL 关键字或保留字做表名、列名、索引名等标识符时,需要使用反引
  • 号扩起来;
  • 不支持 PARTITION 子句;
  • 不支持 UPDATE 使用子查询:
  • 不支持 INSERT DELAYED Syntax;
  • 不支持 STRAIGHT JOIN 和 NATURALJOIN;
  • 受限支持 跨分片 UPDATE 多表需要 join update 的表需要有 PK;
  • 受限支持 跨分片 DELETE 多表中的数据,需要 Join delete 的表需要有 PK:
  • 不支持 SOL 中对于变量的引用和操作,比如 SET @c=1, @d-@c+1; SELECT @c,ad

四、自定义命令

SHOW TOPOLOGY FROM TABLENAME 【查询表的物理拓扑】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值