分片算法 #
自动分片算法 #
取模分片算法 #
类型:MOD
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
sharding-count | int | 分片数量 |
哈希取模分片算法 #
类型:HASH_MOD
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
sharding-count | int | 分片数量 |
基于分片容量的范围分片算法 #
类型:VOLUME_RANGE
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
range-lower | long | 范围下界,超过边界的数据会报错 |
range-upper | long | 范围上界,超过边界的数据会报错 |
sharding-volume | long | 分片容量 |
基于分片边界的范围分片算法 #
类型:BOUNDARY_RANGE
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
sharding-ranges | String | 分片的范围边界,多个范围边界以逗号分隔 |
自动时间段分片算法 #
类型:AUTO_INTERVAL
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
datetime-lower | String | 分片的起始时间范围,时间戳格式:yyyy-MM-dd HH:mm:ss |
datetime-upper | String | 分片的结束时间范围,时间戳格式:yyyy-MM-dd HH:mm:ss |
sharding-seconds | long | 单一分片所能承载的最大时间,单位:秒,允许分片键的时间戳格式的秒带有时间精度,但秒后的时间精度会被自动抹去 |
一致性 Hash 分片算法 #
类型:SphereEx:CONSISTENT_HASH
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
sharding-count | int | 必填项,用于指定分片数。 |
sharding-node-weight | String | 非必填项,分片数据节点的权重,以逗号分隔,例如:“2,2,1,1”。权重越大,用于一致性 Hash 计算的虚拟节点越多,默认权重为 1。 |
virtual-node-count | int | 必填项,分片数据节点对应的虚拟节点个数,虚拟节点数量越多,分片越均衡,但过多的虚拟节点也会影响性能。 |
consistent-hash-seed | int | 非必填项,计算一致性 Hash 的种子参数,默认值为 0。 |
HASH RANGE 算法 #
类型:SphereEx:HASH_RANGE
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
partition-count | int | 分片数量 |
partition-length | int | 分片长度 |
null-value-routing-datanode | String | 指定当分片键值为空时路由到的存储节点 |
精确路由说明:
partitionCount: C1, C2...Cn
partitionLength: L1, L2...Ln
通过这两个配置项,计算基数 M = C1*L1 + C2*L2 + ... + Cn*Ln
路由逻辑: shardingValue % M,然后看结果落到哪一个 partition 里
比如:
partitionCount 配置为 2, 3
partitionLength 配置为 100, 50
则总共分5个 Range,前面两个 range 每个大小为 100,后面三个 range 每个大小为 50
那么基数 M = 2 * 100 + 3 * 50 = 350
假如路由的 sharingValue = 805, 则 805 % 350 = 105, 落在第 2 个 range 里(下标从0开始),对应 t_order_1。
String hash range 算法 #
类型:SphereEx:STRING_HASH_RANGE
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
partition-count | int | 分片数量 |
partition-length | int | 分片长度 |
start-index | int | 截取分片键值的起始下标(包含) |
stop-index | int | 截取分片键值的起始下标(不包含) |
null-value-routing-datanode | String | 指定当分片键值为空时路由到的存储节点 |
精确路由说明:
sharding路由逻辑
精确路由:
1.根据 shardingValue 字符串 subString
2.计算子串的 hash 值
3.取模(根据 partitionLenght 和 partitionCount 共同计算得到 基数 M.)
4.计算落到哪个 range 里
5.路由到真实表
Range路由: 全路由
标准分片算法 #
DB Plus Engine 内置的标准分片算法实现类包括:
行表达式分片算法 #
使用 Groovy 的表达式,提供对 SQL 语句中的 =
和 IN
的分片操作支持,只支持单分片键。
对于简单的分片算法,可以通过简单的配置使用,从而避免繁琐的 Java 代码开发,如: t_user_$->{u_id % 8}
表示 t_user
表根据 u_id
模 8,而分成 8 张表,表名称为 t_user_0
到 t_user_7
。
详情请参见行表达式。
类型:INLINE
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
algorithm-expression | String | 分片算法的行表达式 | |
allow-range-query-with-inline-sharding (?) | boolean | 是否允许范围查询。注意:范围查询会无视分片策略,进行全路由 | false |
时间范围分片算法 #
类型:INTERVAL
可配置属性:
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
datetime-pattern | String | 分片键的时间戳格式,必须遵循 Java DateTimeFormatter 的格式。例如:yyyy-MM-dd HH:mm:ss | |
datetime-lower | String | 时间分片下界值,格式与 datetime-pattern 定义的时间戳格式一致 | |
datetime-upper (?) | String | 时间分片上界值,格式与 datetime-pattern 定义的时间戳格式一致 | 当前时间 |
sharding-suffix-pattern | String | 分片数据源或真实表的后缀格式,必须遵循 Java DateTimeFormatter 的格式,必须和 datetime-interval-unit 保持一致。例如:yyyyMM | |
datetime-interval-amount (?) | int | 分片键时间间隔,超过该时间间隔将进入下一分片 | 1 |
datetime-interval-unit (?) | String | 分片键时间间隔单位,必须遵循 Java ChronoUnit 的枚举值。例如:MONTHS | DAYS |
复合分片算法 #
复合行表达式分片算法 #
详情请参见行表达式。
类型:COMPLEX_INLINE
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
sharding-columns (?) | String | 分片列名称,多个列用逗号分隔。如不配置无法则不能校验 | |
algorithm-expression | String | 分片算法的行表达式 | |
allow-range-query-with-inline-sharding (?) | boolean | 是否允许范围查询。注意:范围查询会无视分片策略,进行全路由 | false |
Hint 分片算法 #
Hint 行表达式分片算法 #
详情请参见行表达式。
类型:HINT_INLINE
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
algorithm-expression (?) | String | 分片算法的行表达式 | ${value} |
自定义类分片算法 #
通过配置分片策略类型和算法类名,实现自定义扩展。
类型:CLASS_BASED
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
strategy | String | 分片策略类型,支持 STANDARD、COMPLEX 或 HINT(不区分大小写) |
algorithmClassName | String | 分片算法全限定名 |
自动化分片算法 #
自动化分片匹配算法 #
通过配置自动化分片匹配算法,配置触发自动化分片的时机。
类型:INTERVAL_UPPER_TIME_HIGH_WATERLINE
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
remaining-seconds-until-upper-time | String | 距离 upper-time 剩余多少秒时触发自动化分片 |
自动化分片管理扩容算法 #
通过配置自动化分片管理扩容算法,配置自动化分片的扩容方式
类型: SCALE_SHARDING
属性有 operation-type 和 amount
可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
operation-type | String | 操作类型。add、subtract、multiply、divide 默认为add |
amount | String | 和上面的操作类型配合,定义自动化分片的数量 比如加2片,还是2倍扩容 |