详细的编译方法,详见。

    分表(partition)版配置文件基本跟分片(shard)版本一样,不同之处在shard.conf文件:

    • 配置partition-mode=true, 使cetus工作在分表模式
    • proxy-backend-addresses和proxy-read-only-backend-addresses配置具体参考读写分离,不需要像分库那样加group
    • 子表名的约定

    例如,配置文件sharding.json中配置如下:

    1. {
    2. "id": 1,
    3. "type": "int",
    4. "method": "hash",
    5. "num": 4,
    6. "partitions": {"data1": [0,1], "data2": [2,3]}
    7. }],
    8. "table": [
    9. {"vdb": 1, "db": "ght", "table": "t1", "pkey": "id"}
    10. ]
    11. }

    则表t1分2个子表,分表之后的各个子表名为:t1_data1, t1_data2。

    • 子表的创建

    假设,目前需要将表tb,按照hash方式分成4个子表,每个子表表名分别为:tb_hs0, tb_hs1, tb_hs2, tb_hs3。则实现上述需求,配置步骤如下:

    • 编译shard版本的Cetus,参考编译命令如下:
    1. proxy-backend-addresses=172.17.0.3:3306
    2. proxy-read-only-backend-addresses=172.17.0.4:3306
    3. partition-mode=true

    特别注意, 不需要在IP PORT后添加@data1

    • 配置sharding.json,配置分表规则
    • 创建子表
    1. use ght;
    2. create table tb_hs1 (id int);
    3. create table tb_hs2 (id int);
    4. create table tb_hs3 (id int);
    • 启动Cetus
    • 验证

    登录Cetus的代理端口,执行shard_explain命令,查看路由情况:

    1. shard_explain select * from tb where id = 7;
    2. +--------+-------------------------------------+
    3. | groups | sql |
    4. +--------+-------------------------------------+
    5. | hs3 | SELECT * FROM tb_hs3 WHERE id = 7; |
    6. +--------+-------------------------------------+
    7. 1 row in set (0.00 sec)
    8. shard_explain select * from tb where id = 5;
    9. | groups | sql |
    10. +--------+-------------------------------------+
    11. +--------+-------------------------------------+
    12. 1 row in set (0.00 sec)
    13. shard_explain select * from tb where id = 3;
    14. +--------+-------------------------------------+
    15. | groups | sql |
    16. +--------+-------------------------------------+
    17. | hs1 | SELECT * FROM tb_hs1 WHERE id = 3; |
    18. +--------+-------------------------------------+
    19. 1 row in set (0.00 sec)
    20. shard_explain select * from tb where id = 1;
    21. +--------+-------------------------------------+
    22. | groups | sql |
    23. +--------+-------------------------------------+
    24. | hs0 | SELECT * FROM tb_hs0 WHERE id = 1; |
    25. 1 row in set (0.00 sec)