数据分片

使用实战

前置工作

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

启动 ShardingSphere-Proxy

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

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

  1. 连接到 ShardingSphere-Proxy
  2. 创建分布式数据库
  1. CREATE DATABASE sharding_db;
  1. 使用新创建的数据库
  1. USE sharding_db;
  1. 配置数据源信息
  1. ADD RESOURCE ds_0 (
  2. HOST=127.0.0.1,
  3. PORT=3306,
  4. DB=ds_1,
  5. USER=root,
  6. PASSWORD=root
  7. );
  8. ADD RESOURCE ds_1 (
  9. HOST=127.0.0.1,
  10. PORT=3306,
  11. DB=ds_2,
  12. USER=root,
  13. PASSWORD=root
  14. );
  1. 创建分片规则
  1. CREATE SHARDING TABLE RULE t_order(
  2. RESOURCES(ds_0,ds_1),
  3. SHARDING_COLUMN=order_id,
  4. TYPE(NAME=hash_mod,PROPERTIES("sharding-count"=4)),
  5. GENERATED_KEY(COLUMN=order_id,TYPE(NAME=snowflake,PROPERTIES("worker-id"=123)))
  6. );
  1. 创建切分表
  1. CREATE TABLE `t_order` (
  2. `order_id` int NOT NULL,
  3. `user_id` int NOT NULL,
  4. `status` varchar(45) DEFAULT NULL,
  5. PRIMARY KEY (`order_id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  1. 删除切分表
  1. DROP TABLE t_order;
  1. 删除分片规则
  1. DROP SHARDING TABLE RULE t_order;
  1. 删除数据源
  1. DROP RESOURCE ds_0, ds_1;
  1. 删除分布式数据库
  1. DROP DATABASE sharding_db;

注意事项

  1. 当前, DROP DATABASE 只会移除 逻辑的分布式数据库,不会删除用户真实的数据库。
  2. DROP TABLE 会将逻辑分片表和数据库中真实的表全部删除。
  3. CREATE DATABASE 只会创建 逻辑的分布式数据库,所以需要用户提前创建好真实的数据库。
  4. 自动分片算法 会持续增加,从而覆盖用户各大分片场景。