常见概念与分片算法
概念术语
ShardingSphere有一些自己独特的分库分表
术语,必须搞清楚它们的意思才能玩得转。
数据节点Node
:是数据分片的最小单元,由数据源名称和数据表组成,例如:ds_0.t_order_0
。

真实表
:在分片的数据库中真实存在的物理表,例如上面的t_order_0
、t_order_1
、t_order_2
。逻辑表
:拆分后具有相同结构的数据表的总称,例如t_order_0
、t_order_1
、t_order_2
的逻辑表就是t_order
。绑定表
:指分片规则一致的主表和子表,例如,t_order
和t_order_item
,均按照orderId
分片,那么这两张表就互为绑定表
关系,且绑定表之间的多表关联查询不会出现笛卡尔积关联。例如,t_order_0
只会和t_order_item_0
关联,而t_order_1
只会和t_order_item_1
关联。

广播表
:指在所有的分片数据源中都存在的表,其表结构和数据在每个数据源中都完全一致。例如,系统配置表
和系统字典表
,广播表
非常适用于那种数据量不大,但又需要与有海量数据的表进行关联查询的场景。

分片算法
分片键(Partition Key)
是用于将表进行切分的关键字段。例如,如果依据主键
对标进行划分,那么主键
就是分片键
,或者根据日期时间范围对表进行划分,那么日期时间字段就是分片键
。
分片键
不一定是主键,它是根据业务情况和系统状态共同决定的。
分片键
也不一定是单个字段,它也可以由多个字段组成。例如,先对主键进行Hash
计算取模,然后再结合日期时间字段来对数据表进行分片。
ShardingSphere支持下面几种分片策略。
行分片策略(InlineShardingStrategy)
:只支持单个字段的分片键
,提供对SQL
中=
和IN
的操作支持。这种方式无需自定义分片算法,简单配置后就能用。
-- 订单表根据id对8取模,进而拆分成8张表,表名从t_order_0 ~ t_order_7
t_order_$-> {id % 8}
标准分片策略(StandardShardingStrategy)
:也只支持单个字段的分片键
,提供PreciseShardingAlgorithm
和RangeShardingAlgorithm
两个分片算法。PreciseShardingAlgorithm
是必选的,用于精准分片,用于处理=
和IN
操作。而RangeShardingAlgorithm
是可选的,用于范围分配,用于处理BETWEEN AND
操作。复合分片策略(ComplexShardingStrategy)
:支持多字段组合的分片键
,需要由开发者自己实现分片算法。Hint分片策略(HintShardingStrategy)
:这种策略不在目标表上配置分片键
,分片健值也不从SQL
中获得,而是手动在外部指定分片健
或分片库
,让SQL
在指定的分片健
或分片库
中执行分库分表
。不分片策略(NoneShardingStrategy)
:就是不用ShardingSphere。
感谢支持
更多内容,请移步《超级个体》。