RDL

定义

RDL(Resource & Rule Definition Language)用于定义数据源资源、创建规则等。

RDL 主要包括以下 SQL 内容:

  • Create DATASOURCES,用于注入数据源信息。
// SQL
CREATE DATASOURCES (
ds_key=host_name:host_port:db_name:user_name:pwd
[, ds_key=host_name:host_port:db_name:user_name:pwd, ...]
)

// Example
CREATE datasources (
ds0=127.0.0.1:3306:demo_ds_0:root:pwd, 
ds1=127.0.0.1:3306:demo_ds_1:root:pwd)
  • CREATE SHARDING RULE,用于配置分片规则。
// SQL

CREATE SHARDING RULE (
sharding_table_name=sharding_algorithm(algorithm_property[, algothrim_property])
[, sharding_table_name=sharding_algorithm_type(algorithm_property[, algothrim_property]), ...]
)

sharding_algorithm_type: {MOD | HASH_MODE} 
mod_algorithm_properties: sharding_column,shards_amount
mod_hash_algorithm_properties: sharding_column,shards_amount

// Example
CREATE SHARDING RULE (
t_order=hash_mod(order_id, 4), 
t_item=mod(item_id, 2)
)

使用实战

前置工作

  1. 启动MySQL服务
  2. 创建MySQL数据库(参考ShardingProxy数据源配置规则)
  3. 为ShardingProxy创建一个拥有创建权限的角色或者用户
  4. 启动Zookeeper服务 (为了持久化配置)

启动ShardingProxy

  1. 添加 governanceauthentication 配置参数到 server.yaml (请参考相关example案例)
  2. 启动 ShardingProxy (相关介绍)

创建分布式数据库和分片表

  1. 连接到ShardingProxy
  2. 创建分布式数据库
CREATE DATABASE sharding_db;
  1. 使用新创建的数据库
USE sharding_db;
  1. 配置数据源信息
CREATE datasources (
ds0=127.0.0.1:3306:demo_ds_2:root:pwd, 
ds1=127.0.0.1:3306:demo_ds_3:root:pwd)
  1. 创建分片规则
CREATE SHARDING RULE (
t_order=hash_mod(order_id, 4), 
t_item=mod(item_id, 2)
)

这里的 hash_modemod是自动分片算法的Key。详情请查阅 auto-sharding-algorithm

  1. 创建切分表
CREATE TABLE `t_order` (
  `order_id` int NOT NULL,
  `user_id` int NOT NULL,
  `status` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

CREATE TABLE `t_item` (
  `item_id` int NOT NULL,
  `order_id` int NOT NULL,
  `user_id` int NOT NULL,
  `status` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  1. 删除切分表
DROP TABLE t_order;
DROP TABLE t_item;
  1. 删除分布式数据库
DROP DATABASE sharding_db

注意事项

  1. 当前, DROP DB只会移除逻辑的分布式数据库,不会删除用户真实的数据库 (TODO)。
  2. DROP TABLE会将逻辑分片表和数据库中真实的表全部删除。
  3. CREATE DB只会创建逻辑的分布式数据库,所以需要用户提前创建好真实的数据库(TODO)。
  4. 自动分片算法会持续增加,从而覆盖用户各大分片场景 (TODO)。
  5. 重构ShardingAlgorithmPropertiesUtilTODO)。
  6. 保证所有客户端完成RDL执行(TODO)。
  7. 增加 ALTER DBALTER TABLE的支持(TODO)。