DRDS使用

表操作

查看所有表

SHOW TABLES;

查看建表语句

# 查看单表建表语句
SHOW CREATE TABLE single_tbl;

# 查看通过HASH函数进行拆分的表的建表语句
SHOW CREATE TABLE multi_db_single_tbl;

##

按ID分表

使用HASH函数进行分表。

CREATE TABLE multi_db_single_tbl(
  id int auto_increment, 
  name varchar(30), 
  primary key(id)
) dbpartition by hash(id);

按ID分库

CREATE TABLE `post` (
  `postingType` int NOT NULL,
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `acceptedAnswer` bigint(20) DEFAULT NULL,
  `parentId` bigint(20) DEFAULT NULL,
  `score` int DEFAULT NULL,
  `tags` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) DBPARTITION BY hash(id) ENGINE=InnoDB DEFAULT CHARSET=utf8;

删除表

# 删除单表
DROP TABLE single_tbl;

# 删除通过HASH函数进行拆分的表
DROP TABLE multi_db_single_tbl;

列操作

# 增加列
ALTER TABLE multi_db_single_tbl ADD COLUMN textcol text; 

# 修改列数据类型
ALTER TABLE multi_db_single_tbl MODIFY COLUMN textcol varchar(40);  

# 删除列
ALTER TABLE multi_db_single_tbl DROP COLUMN textcol;

索引操作

# 创建索引
CREATE INDEX idx_name ON multi_db_single_tbl(name);
ALTER TABLE multi_db_single_tbl ADD INDEX idx_name(name);

# 查看索引
SHOW INDEX FROM multi_db_single_tbl;

# 删除索引
DROP INDEX idx_name ON multi_db_single_tbl;
ALTER TABLE multi_db_single_tbl DROP INDEX idx_name;

小表广播

对于数据量少,且数据变化不频繁,数据一致性要求不高的单库单表,为了解决跨库问题,可以考虑使用小表广播。小表广播是指将表复制到每个分库上,在分库上通过同步机制实现数据一致,但存在秒级延迟。好处在于,可以将 JOIN 操作下推到底层的分库,来避免跨库 JOIN,提高执行效率。如下所示,建表时使用 BROADCAST 关键字:

 CREATE TABLE users (
  user_id int, 
  user_name varchar(50), 
  create_time date,
  primary key(id)
) ENGINE=InnoDB BROADCAST; 

大数据导入示例

使用程序进行大数据导入 (aliyun.com)

分库分表

当一张逻辑表的分库拆分方式与分表拆分方式不一致时,若SQL查询没有同时带上分库条件与分表条件,则PolarDB-X 1.0在查询过程会进行全分库扫描或全分表扫描操作。

SQL语法

dbpartition:分库

tbpartition :分表

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [drds_partition_options]
    [partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [drds_partition_options]
    [partition_options]
    select_statement

drds_partition_options:
    DBPARTITION BY
        { {HASH|YYYYMM|YYYYWEEK|YYYYDD|...}([column])}
        [TBPARTITION BY
            { {HASH|MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|...}(column)}
          [TBPARTITIONS num]
        ]

实名制稽核分库分表设计

1、保证用户数据与照片数据必须在同一个分库内,避免跨库join

2、使用UNI_HASH算法,避免夸库join

create table test_hash_tb (
    id int,
    name varchar(30) DEFAULT NULL,  
    create_time datetime DEFAULT NULL,
    primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by UNI_HASH(ID)
tbpartition by UNI_HASH(ID) tbpartitions 4;

3、数据尽可能平分

4、使用手机号码分库,使用省份分表

5、单库单表要明确

6、