分布式事务数据库HotDB的语法特殊功能

2022-03-15 00:00:00 创建 字段 节点 逻辑 分片

1.建表即分片

计算节点默认是需要将表信息配置好之后才能创建表的。但实际使用过程中,用户在接触HotDB Server之初对计算节点不了解,且对分布式没有概念的情况下,可有一种简单的方式从MySQL平缓过渡到HotDB Server,即:建表时根据逻辑库默认关联节点分片的功能。

功能说明: 配置逻辑库时增加默认节点,动态加载后,登录计算节点可以直接建表,无需再配置表信息分片规则,若逻辑库关联一个节点则创建垂直分片表,若逻辑库关联多个节点则创建AUTO_CRC32类型的水平分片表。

使用前提:逻辑库设置默认节点

1. 登录分布式事务数据库管理平台,选择“配置”->“逻辑库”,设置逻辑库默认节点;

  • 管理平台默认逻辑库配置完成并动态加载之后,可直接通过create语句创建表(无需再在管理平台上定义),建表后自动生成配置(包括表信息以及分片规则等)。
  • 若逻辑库选择单个节点,默认创建垂直分片表;若选择多个节点,默认创建分片类型为AUTO_CRC32的水平分片表,且优先选择主键、键字段作为分片字段。
  • 若后期对逻辑库默认节点进行更改,对更改之前创建的表无影响,只对后续新增的表生效

  • 2.登录计算节点选择“test001”逻辑库,创建表,创建成功:

    假设“test001”默认节点只有一个,则“test01”为垂直分片表;假设“test002”默认节点有多个,则“test02”为水平分片表

    mysql> use TEST001;

    Database changed

    mysql> create table test01(id not nullauto_increment primary key,a char(8),b decimal(4,2),c int);

    mysql> use TEST002;

    Database changed

    mysql> create table test02(id not nullauto_increment primary key,a char(8),b decimal(4,2),c int);

    · 自动创建的水平分片表,分片字段选取顺序:主键字段 -> 键字段 ->个整型字段(BIGINT、INT、MEDIUMINT、SMALLINT、TINYINT) - >整型字段取完之后,取字符串类型字段(CHAR、VARCHAR ) 以上类型全部取完还没有合适的时候,默认随机选择一个字段作为分片字段。

    注意: 此功能仅推荐在初次接触HotDBServer的时候使用,正式交付以及上线不推荐,需要根据实际业务场景做分片。

    2.3全局表


    全局表的定义请参考《分布式事务数据库HotDB Server【名词解释】功能使用手册》,使用如下语法在服务端创建全局表:

    CREATE TABLE [IF NOT EXISTS] tbl_name SHARDBY global on datanode 'datanodeid'(.....


    Server端直接创建全局表时, 必须在shardby 后面加global,且在on datanode之前,顺序不可调换。

    mysql> CREATE TABLE tb_quan shard by global(idint not null auto_increment primary key,a int(10),b decimanl(5,2),cdecimal(5,2),d date,e time(6),f timestamp(6) DEFAULT CURRENT_TIMESTAMP(6),gdatetime(6) DEFAULT CURRENT_TIMESTAMP(6),h year,I char(20) null,j varchar(30),kblob,l text, m enum('','null','1','2','3'),n set('','null','1','2','3'));

    Query OK, 0 rows affected (0.07 sec)



    语法规则里的global是创建全局表的标志,'datanodeid'为节点ID,可以逗号间隔,且支持区间形式指定,如:'1,3,4,5-10,12-40',使用该语法创建分片规则的全局表,该表的节点应该包括逻辑库下所有节点。

    Ø 假设创建全局表的逻辑库里不存在表,需要指定节点:

    mysql> CREATE TABLE tb2_quan shard byglobal(id int not null auto_increment primary key,a int(10),b decimanl(5,2),cdecimal(5,2),d date,e time(6),f timestamp(6) DEFAULT CURRENT_TIMESTAMP(6),gdatetime(6) DEFAULT CURRENT_TIMESTAMP(6),h year,i char(20) null,j varchar(30),kblob,l text, m enum('','null','1','2','3'),n set('','null','1','2','3'));

    ERROR 10090 (HY000): This table has to specify adatanodes.


    Ø 假设创建全局表的逻辑库下有表,可直接不指定节点,否则指定的节点必须覆盖逻辑库下的所有节点:

    mysql> CREATE TABLE tb1_quan shard by globalon datanodes'9,11'(id int not null auto_increment primary key,a int(10),bdecimanl(5,2),c decimal(5,2),d date,e time(6),f timestamp(6) DEFAULTCURRENT_TIMESTAMP(6),g datetime(6) DEFAULT CURRENT_TIMESTAMP(6),h year,ichar(20) null,j varchar(30),k blob,l text, m enum('','null','1','2','3'),nset('','null','1','2','3'));

    ERROR 10090 (HY000): The specified datanodes mustcover all datanodes of the logical database.

    使用已有分片规则建表相关命令

    此小节介绍的命令可以登录到计算节点管理端口执行。

    1. show hotdb datanodes – 显示当前可用的节点:

    此命令用于查看配置库中hotdb_datanodes表,语法:

    mysql> show hotdb datanodes [LIKE 'pattern' |WHERE expr];

    命令包含参数及其说明:

    参数说明类型
    pattern可选,模糊查询表达式,匹配datanode_name字段STRING
    expr可选,where条件表达式STRING


    结果包含字段及其说明:

    列名说明值类型/范围
    datanode_id节点IDINTEGER
    datanode_name节点名称STRING
    datanode_type0:主备;1:MGRINTEGER


    例如:

    mysql> show hotdb datanodes;

    +-------------+---------------+---------------+

    | datanode_id | datanode_name | datanode_type |

    +-------------+---------------+---------------+

    | 1 | dn_01 | 0 |

    | 2 | dn_02 | 0 |

    | 4 | dn_04 | 0 |

    | 101 | dn_101 | 0 |

    | 127 | dn_03 | 0 |

    | 186 | dn_199 | 0 |

    | 203 | dn_19 | 0 |

    +-------------+---------------+---------------+


    又如:

    mysql> show hotdb datanodes like 'dn_0%';

    +-------------+---------------+---------------+

    | datanode_id | datanode_name | datanode_type |

    +-------------+---------------+---------------+

    | 1 | dn_01 | 0 |

    | 2 | dn_02 | 0 |

    | 4 | dn_04 | 0 |

    | 127 | dn_03 | 0 |

    +-------------+---------------+---------------+



    2. show hotdb functions – 显示当前可用的分片函数:

    此命令用于查看配置库中hotdb_function表,语法:

    mysql> show hotdb functions;



    命令包含参数及其说明:

    参数说明类型
    pattern可选,模糊查询表达式,匹配function_name字段STRING
    expr可选,where条件表达式STRING


    结果包含字段及其说明:

    列名说明值类型/范围
    function_id分片函数IDINTEGER
    function_name分片函数名称STRING
    function_type分片类型STRING
    auto_generated是否为HotDB自动生成的配置(1:自动生成,其他:非自动生成)INTEGER


    例如:

    mysql> show hotdb functions;

    +-------------+---------------------+---------------+----------------+

    | function_id | function_name | function_type | auto_generated |

    +-------------+---------------------+---------------+----------------+

    …省略更多…

    | 40 | AUTO_CRC32_8 |AUTO_CRC32 | 0 |

    | 41 | th_fun_range | RANGE | 0 |

    | 42 | AUTO_MOD_5 |AUTO_MOD | 0 |

    | 43 | 43_RANGE | RANGE | 0 |

    | 44 | AUTO_CRC32_15 |AUTO_CRC32 | 0 |

    | 45 | AUTO_CRC32_5 |AUTO_CRC32 | 0 |

    | 46 | yds_RANGE | RANGE | 0 |

    | 47 | AUTO_CRC32_11 |AUTO_CRC32 | 0 |

    +-------------+---------------------+---------------+----------------+


    又如:

    mysql> show hotdb functions like '%range%';

    +-------------+---------------+---------------+----------------+

    | function_id | function_name | function_type |auto_generated |

    +-------------+---------------+---------------+----------------+

    | 41 | th_fun_range | RANGE | 0 |

    | 43 | 43_RANGE | RANGE | 0 |

    | 46 | yds_RANGE | RANGE | 0 |

    +-------------+---------------+---------------+----------------+

    3 rows in set (0.00 sec)


    mysql> show hotdb functions wherefunction_name like '%range%';

    +-------------+---------------+---------------+----------------+

    | function_id | function_name | function_type |auto_generated |

    +-------------+---------------+---------------+----------------+

    | 41 | th_fun_range | RANGE | 0 |

    | 43 | 43_RANGE | RANGE | 0 |

    | 46 | yds_RANGE | RANGE | 0 |

    +-------------+---------------+---------------+----------------+

    3 rows in set (0.00 sec)



    3. show hotdb function infos - 显示当前可用的分片函数信息:

    此命令用于查看配置库中hotdb_function_info表,语法:

    mysql> show hotdb function infos [WHERE expr];



    命令包含参数及其说明:

    参数说明类型
    expr可选,where条件表达式STRING


    结果包含字段及其说明:

    列名说明值类型/范围
    function_id分片函数IDINTEGER
    column_value分片字段的值STRING
    datanode_id数据节点idINTEGER


    例如:

    mysql> show hotdb function infos;

    +-------------+--------------+-------------+

    | function_id | column_value | datanode_id |

    +-------------+--------------+-------------+

    | 2 | 4 | 0 |

    | 3 | 1 | 0 |

    | 4 | 2 | 0 |

    | 31 | '' | 4 |

    | 31 | 1 | 1 |

    | 31 | 2 | 2 |

    | 31 | null | 127 |

    | 33 | 0:1 | 1 |

    | 33 | 10:10 | 191 |

    | 33 | 11:11 | 186 |

    | 33 | 12 | 0 |

    | 33 | 2:3 | 2 |

    …省略更多…


    又如:

    mysql> show hotdb function infos wherefunction_id=38;

    +-------------+--------------+-------------+

    | function_id | column_value | datanode_id |

    +-------------+--------------+-------------+

    | 38 | 10:12 | 1 |

    | 38 | 1:2 | 1 |

    | 38 | 20 | 0 |

    | 38 | 4:8 | 1 |

    +-------------+--------------+-------------+

    4 rows in set (0.00 sec)



    4. show hotdb rules – 显示当前可用的分片规则:

    此命令用于查看配置库中hotdb_rule 表,语法:

    mysql> show hotdb rules [LIKE 'pattern' |WHERE expr];



    命令包含参数及其说明:

    参数说明类型
    pattern可选,模糊查询表达式,匹配rule_name字段STRING
    expr可选,where条件表达式STRING


    结果包含字段及其说明:

    列名说明值类型/范围
    rule_id分片规则IDINTEGER
    rule_name分片规则名称STRING
    rule_column分片字段名称STRING
    function_id分片类型IDINTEGER
    auto_generated是否为HotDB自动生成的配置(1:自动生成,其他:非自动生成)INTEGER


    例如:

    mysql> show hotdb rules;

    +---------+--------------------------------------------------------+-------------+-------------+----------------+

    | rule_id | rule_name |rule_column | function_id | auto_generated |

    +---------+--------------------------------------------------------+-------------+-------------+----------------+

    | 21 |AUTO_GENERATE_3_JOIN_A_JWY | ID | 1 | 1 |

    | 22 |hotdb-cloud_0374c02e-58a7-4263-9b80-9c5b46fb42af | id | 5 | 0 |

    | 25 |hotdb-cloud_f3979d19-93cb-4925-8dee-e4fbf8803c7c | id | 5 | 0 |

    | 32 |hotdb-cloud_6ccd2f69-cf53-4e81-ab3d-61345134fb7a | id | 5 | 0 |

    | 33 |hotdb-cloud_b5bc16e6-3481-40ed-83ff-e81d488e47a5 | ID | 4 | 0 |

    …省略更多…


    又如:

    mysql> show hotdb rules like '%auto%';

    +---------+----------------------------+-------------+-------------+----------------+

    | rule_id | rule_name | rule_column | function_id |auto_generated |

    +---------+----------------------------+-------------+-------------+----------------+

    | 21 |AUTO_GENERATE_3_JOIN_A_JWY | ID | 1 | 1 |

    | 50 |AUTO_GENERATE_9_FT_ADDR | ID | 26 | 1 |

    | 64 |AUTO_GENERATE_23_S03 | A | 1 | 1 |

    | 65 |AUTO_GENERATE_23_S04 | B | 1 | 1 |

    …省略更多…


    mysql> show hotdb rules where rule_name like'%auto%';

    +---------+----------------------------+-------------+-------------+----------------+

    | rule_id | rule_name | rule_column | function_id |auto_generated |

    +---------+----------------------------+-------------+-------------+----------------+

    | 21 |AUTO_GENERATE_3_JOIN_A_JWY | ID | 1 | 1 |

    | 50 |AUTO_GENERATE_9_FT_ADDR | ID | 26 | 1 |

    | 64 |AUTO_GENERATE_23_S03 | A | 1 | 1 |

    | 65 |AUTO_GENERATE_23_S04 | B | 1 | 1 |

    来源 

    https://zhuanlan.zhihu.com/p/394021432

相关文章