-
Notifications
You must be signed in to change notification settings - Fork 73
Closed
Labels
area/database-governanceCategory issues or PRs related to database governanceCategory issues or PRs related to database governancekind/spec-RFCIssues or PRs for OpenSergo spec RFCIssues or PRs for OpenSergo spec RFC
Description
domain: database
Umbrella issue: #15
Sharding defines a set of rules help declare how to implementing sharding.
(English version TBD...)
数据分片是基于数据属性一种扩展策略,对数据属性进行计算后将请求发往特定的数据后端,目前分为分片键分片和自动分片。其中分片键分片中需要指明需要分片的表、列、以及进行分片的算法。
配置数据分片首先需要确定是分片键分片还是自动分片,规则配置如下:
分片键分片的规则配置包括:
- tables: # 数据分片规则配置
- < logicalTableName>: # 逻辑表名称
- actualDataNodes: # 由数据源名 + 表名组成(参考 Inline 语法规则)
- databaseStrategy: # 分库策略,缺省表示使用默认分库策略,以下的切分策略只能选其一
- tableStrategy: # 分表策略,同分库策略
- keyGenerateStrategy: # 分布式序列策略
自动分片的规则配置包括:
- < logicalTableName>: # 逻辑表名称
- autoTables: # 自动分片表规则配置
- t_order_auto: # 逻辑表名称
- actualDataSources: # 数据源名称
- shardingStrategy: # 切分策略
两种分片规则都需要根据场景配置绑定表和广播表策略,规则配置如下:
绑定表策略的规则配置包括:
- bindingTables: # 绑定表规则列表
- <logic_table_name_1, logic_table_name_2, ...>
- <logic_table_name_1, logic_table_name_2, ...>
广播表策略的规则配置包括:
- broadcastTables: # 广播表规则列表
- <table_name>
- <table_name>
除此之外,对于用户未指定的情况需要应用默认策略,规则配置包括:
- defaultDatabaseStrategy: # 默认数据库分片策略
- defaultTableStrategy: # 默认表分片策略
- defaultKeyGenerateStrategy: # 默认的分布式序列策略
- defaultShardingColumn: # 默认分片列名称
需要用到的策略包括切分策略、分布式序列策略,规则配置如下:
databaseStrategy 和 tableStrategy 都需要配置切分策略:
- standard: # 用于单分片键的标准分片场景
- shardingColumn: # 分片列名称
- shardingAlgorithmName: # 自动分片算法名称
- complex: # 用于多分片键的复合分片场景
- shardingColumn: # 分片列名称,多个列以逗号分隔
- shardingAlgorithm: # 分片算法名称
- hint: # Hint 分片策略
- shardingColumn: 分片列名
- shardingAlgorithm: 分片算法
- none: # 不填即为 none,表示不分片
分布式序列策略:
- keyGenerateStrategy: # 分布式序列策略
- column: # 自增列名称,缺省表示不使用自增主键生成器
- keyGeneratorName: # 分布式序列算法名称
分片算法和分布式序列算法配置如下:
分片算法配置:
- shardingAlgorithms:
- : # 分片算法名称
type: # 分片算法类型
props: # 分片算法属性配置
- : # 分片算法名称
分布式序列算法配置:
- keyGenerators:
- : # 分布式序列算法名称
type: # 分布式序列算法类型
props: # 分布式序列算法属性配置
- : # 分布式序列算法名称
分片键分片 YAML 示例:
apiVersion: database.opensergo.io/v1alpha1
kind: Sharding
metadata:
name: sharding_db
spec:
tables: # map[string]object 类型
t_order:
actualDataNodes: "ds_${0..1}.t_order_${0..1}"
tableStrategy:
standard:
shardingColumn: "order_id"
shardingAlgorithmName: "t_order_inline"
keyGenerateStrategy:
column: "order_id"
keyGeneratorName: "snowflake"
t_order_item:
actualDataNodes: "ds_${0..1}.t_order_item_${0..1}"
tableStrategy:
standard:
shardingColumn: "order_id"
shardingAlgorithmName: "t_order_item_inline"
keyGenerateStrategy:
column: order_item_id
keyGeneratorName: snowflake
bindingTables:
- "t_order,t_order_item"
defaultDatabaseStrategy:
standard:
shardingColumn: "user_id"
shardingAlgorithmName: "database_inline"
# defaultTableStrategy: # 为空表示 none
shardingAlgorithms: # map[string]object 类型
database_inline:
type: INLINE
props: # map[string]string 类型
algorithm-expression: "ds_${user_id % 2}"
t_order_inline:
type: INLINE
props:
algorithm-expression: "d_order_${order_id % 2}"
t_order_item_inline:
type: INLINE
props:
algorithm-expression: "d_order_item_${order_id % 2}"
keyGenerators: # map[string]object 类型
snowflake:
type: SNOWFLAKE自动分片 YAML 示例:
apiVersion: database.opensergo.io/v1alpha1
kind: Sharding
metadata:
name: sharding_db
spec:
autoTables:
t_order_auto:
actualDataNodes: "ds_${0..1}.t_order_${0..1}"
shardingStrategy:
standard:
shardingColumn: ""
shardingAlgorithmName: ""sczyh30
Metadata
Metadata
Assignees
Labels
area/database-governanceCategory issues or PRs related to database governanceCategory issues or PRs related to database governancekind/spec-RFCIssues or PRs for OpenSergo spec RFCIssues or PRs for OpenSergo spec RFC