The CREATE SHARDING TABLE RULE
syntax is used to add sharding table rule for the currently selected schema
CreateShardingTableRule ::=
'CREATE' 'SHARDING' 'TABLE' 'RULE' ( tableDefinition | autoTableDefinition ) ( ',' ( tableDefinition | autoTableDefinition ) )*
tableDefinition ::=
tableName '(' 'DATANODES' '(' dataNode ( ',' dataNode )* ')' ( ',' 'DATABASE_STRATEGY' '(' strategyDefinition ')' )? ( ',' 'TABLE_STRATEGY' '(' strategyDefinition ')' )? ( ',' 'KEY_GENERATE_STRATEGY' '(' keyGenerateStrategyDefinition ')' )? ')'
autoTableDefinition ::=
tableName '(' 'RESOURCES' '(' resourceName ( ',' resourceName )* ')' ',' 'SHARDING_COLUMN' '=' columnName ',' algorithmDefinition ( ',' 'KEY_GENERATE_STRATEGY' '(' keyGenerateStrategyDefinition ')' )?')'
strategyDefinition ::=
'TYPE' '=' strategyType ',' ( 'SHARDING_COLUMN' | 'SHARDING_COLUMNS' ) '=' columnName ',' algorithmDefinition
keyGenerateStrategyDefinition ::=
'KEY_GENERATE_STRATEGY' '(' 'COLUMN' '=' columnName ',' ( 'KEY_GENERATOR' '=' algorihtmName | algorithmDefinition ) ')'
algorithmDefinition ::=
('SHARDING_ALGORITHM' '=' algorithmName | 'TYPE' '(' 'NAME' '=' algorithmType ( ',' 'PROPERTIES' '(' propertyDefinition ')' )?')' )
propertyDefinition ::=
( key '=' value ) ( ',' key '=' value )*
tableName ::=
identifier
resourceName ::=
identifier
columnName ::=
identifier
algorithmName ::=
identifier
tableDefinition
is defined for standard sharding table rule; autoTableDefinition
is defined for auto sharding table rule. For standard sharding rules and auto sharding rule, refer to Data Sharding.DATANODES
can only use resources that have been added to the current schema, and can only use INLINE expressions to specify required resourcesDATABASE_STRATEGY
, TABLE_STRATEGY
are the database sharding strategy and the table sharding strategy, which are optional, and the default strategy is used when not configuredTYPE
in strategyDefinition
is used to specify the type of Sharding Algorithm, currently only supports STANDARD
, COMPLEX
. Using COMPLEX
requires specifying multiple sharding columns with SHARDING_COLUMNS
.RESOURCES
can only use resources that have been added to the current schema, and the required resources can be specified by enumeration or INLINE expressionalgorithmType
is the sharding algorithm type, please refer to Sharding AlgorithmtableName
_ strategyType
_ shardingAlgorithmType
tableName
_ strategyType
KEY_GENERATE_STRATEGY
is used to specify the primary key generation strategy, which is optional. For the primary key generation strategy, please refer to Distributed Primary Key-- create sharding algorithms
CREATE SHARDING ALGORITHM database_inline (
TYPE(NAME=inline, PROPERTIES("algorithm-expression"="t_order_${user_id % 2}"))
), table_inline (
TYPE(NAME=inline, PROPERTIES("algorithm-expression"="t_order_${order_id % 2}"))
);
-- create a sharding rule by specifying sharding algorithms
CREATE SHARDING TABLE RULE t_order (
DATANODES("ds_${0..1}.t_order_${0..1}"),
DATABASE_STRATEGY(TYPE=standard, SHARDING_COLUMN=user_id, SHARDING_ALGORITHM=database_inline),
TABLE_STRATEGY(TYPE=standard, SHARDING_COLUMN=order_id, SHARDING_ALGORITHM=table_inline)
);
-- create sharding algorithms
CREATE SHARDING ALGORITHM database_inline (
TYPE(NAME=inline, PROPERTIES("algorithm-expression"="t_order_${user_id % 2}"))
), table_inline (
TYPE(NAME=inline, PROPERTIES("algorithm-expression"="t_order_${order_id % 2}"))
);
-- create a default sharding database strategy
CREATE DEFAULT SHARDING DATABASE STRATEGY (
TYPE = standard, SHARDING_COLUMN=order_id, SHARDING_ALGORITHM=database_inline
);
-- create a sharding table rule by specifying a sharding algorithm
CREATE SHARDING TABLE RULE t_order (
DATANODES("ds_${0..1}.t_order_${0..1}"),
TABLE_STRATEGY(TYPE=standard, SHARDING_COLUMN=order_id, SHARDING_ALGORITHM=table_inline)
);
-- create sharding algorithms
CREATE SHARDING ALGORITHM database_inline (
TYPE(NAME=inline, PROPERTIES("algorithm-expression"="t_order_${user_id % 2}"))
), table_inline (
TYPE(NAME=inline, PROPERTIES("algorithm-expression"="t_order_${order_id % 2}"))
);
-- create a default sharding database strategy
CREATE DEFAULT SHARDING DATABASE STRATEGY (
TYPE = standard, SHARDING_COLUMN=order_id, SHARDING_ALGORITHM=database_inline
);
-- create a default sharding table strategy
CREATE DEFAULT SHARDING TABLE STRATEGY (
TYPE = standard, SHARDING_COLUMN=order_id, SHARDING_ALGORITHM=table_inline
);
-- create a sharding table rule
CREATE SHARDING TABLE RULE t_order (
DATANODES("ds_${0..1}.t_order_${0..1}")
);
CREATE SHARDING TABLE RULE t_order (
DATANODES("ds_${0..1}.t_order_${0..1}"),
DATABASE_STRATEGY(TYPE=standard, SHARDING_COLUMN=user_id, SHARDING_ALGORITHM(TYPE(NAME=inline, PROPERTIES("algorithm-expression"="ds_${user_id % 2}")))),
TABLE_STRATEGY(TYPE=standard, SHARDING_COLUMN=user_id, SHARDING_ALGORITHM(TYPE(NAME=inline, PROPERTIES("algorithm-expression"="ds_${order_id % 2}"))))
);
CREATE SHARDING TABLE RULE t_order (
RESOURCES(ds_0, ds_1),
SHARDING_COLUMN=order_id, TYPE(NAME=MOD, PROPERTIES("sharding-count"=4))
);
CREATE, SHARDING, TABLE, RULE, DATANODES, DATABASE_STRATEGY, TABLE_STRATEGY, KEY_GENERATE_STRATEGY, RESOURCES, SHARDING_COLUMN, TYPE, SHARDING_COLUMN, KEY_GENERATOR, SHARDING_ALGORITHM, COLUMN, NAME, PROPERTIES