[Shardingsphere]一些需要知道的概念

这些概念大多是从官网抠出来的,调整了下格式,某些地方加入了自己的一些示例、理解。

SQL

逻辑表

水平拆分的数据库表的相同逻辑和数据结构表的总称。
例如:
医院信息表被拆分为biz_yy_info_0 ... biz_yy_info_9,他们对应的逻辑表为biz_yy_info

真实表

在分片数据库中真实存在的物理表。例如逻辑表中介绍的biz_yy_info_0...biz_yy_info_9

数据节点

数据源名称和数据表组成的数据分片最小单元。例如ds_0.biz_yy_info_0

绑定表

指分片规则相同的主表和子表。例如两张表,tbordertbperson,都按照同一个字段——person_id分片,因此这两张表互为绑定表。两张绑定表在关联时不会出现笛卡尔积,关联效率较高。

广播表

指所有分片数据源中都存在的表,表结构、数据在每个节点都完全一致。适用于数据量不大,需要与海量数据的表关联的场景。

分片

分片键

用于分片的数据库字段,用于将数据水平拆分的关键字段。sharding-sphere支持多个字段分片键。

分片算法(四种)

通过分片算法将数据分片,支持通过=>=<=><BETWEENIN分片。
注意:分片算法需要自行实现。
例如,下图是我实现的一个分片算法。
在这里插入图片描述
在这里插入图片描述

  • 精确分片算法
    对应PreciseShardingAlgorithm,用于处理使用单一键作为分片键的=IN进行分片的场景。需要配合StandardShardingStrategy使用。

  • 范围分片算法
    对应RangeShardingAlgorithm,用于处理使用单一键作为分片键的BETWEEN AND><>=<=进行分片的场景。需要配合StandardShardingStrategy使用。

  • 复合分片算法
    对应ComplexKeysShardingAlgorithm,用于处理使用多键作为分片键进行分片的场景,包含多个分片键的逻辑较复杂,需要应用开发者自行处理其中的复杂度。需要配合ComplexShardingStrategy使用。

  • Hint分片算法
    对应HintShardingAlgorithm,用于处理使用Hint行分片的场景。需要配合HintShardingStrategy使用。

分片策略

包含分片键和分片算法,由于分片算法的独立性,将其独立抽离。真正可用于分片操作的是分片键 + 分片算法,也就是分片策略。

  • 标准分片策略
    对应StandardShardingStrategy。提供对SQL语句中的=,>, <, >=, <=, INBETWEEN AND的分片操作支持。StandardShardingStrategy只支持单分片键,提供PreciseShardingAlgorithmRangeShardingAlgorithm两个分片算法。PreciseShardingAlgorithm是必选的,用于处理=IN的分片。RangeShardingAlgorithm是可选的,用于处理BETWEEN AND, >,<, >=, <=分片,如果不配置RangeShardingAlgorithm,SQL中的BETWEEN AND将按照全库路由处理。
  • 复合分片策略
    对应ComplexShardingStrategy。复合分片策略。提供对SQL语句中的=, >,<, >=, <=, INBETWEEN AND的分片操作支持。ComplexShardingStrategy支持多分片键,由于多分片键之间的关系复杂,因此并未进行过多的封装,而是直接将分片键值组合以及分片操作符透传至分片算法,完全由应用开发者实现,提供最大的灵活度。
  • 行表达式分片策略
    对应InlineShardingStrategy。使用Groovy的表达式,提供对SQL语句中的=和IN的分片操作支持,只支持单分片键。对于简单的分片算法,可以通过简单的配置使用,从而避免繁琐的Java代码开发,如: t_user_$->{u_id % 8} 表示t_user表根据u_id模8,而分成8张表,表名称为t_user_0到t_user_7。
  • Hint分片策略
    对应HintShardingStrategy。通过Hint而非SQL解析的方式分片的策略。
  • 不分片策略
    对应NoneShardingStrategy。不分片的策略。

SQL Hint

对于分片字段非SQL决定,而由其他外置条件决定的场景,可使用SQL Hint灵活的注入分片字段。例:内部系统,按照员工登录主键分库,而数据库中并无此字段。SQL Hint支持通过Java API和SQL注释(待实现)两种方式使用。

配置

分片规则

分片规则配置的总入口。包含数据源配置、表配置、绑定表配置以及读写分离配置等。
在这里插入图片描述

数据源配置

真实数据源列表。
在这里插入图片描述

表配置

逻辑表名称、数据节点与分表规则的配置。

数据节点配置

用于配置逻辑表与真实表的映射关系。可分为均匀分布和自定义分布两种形式。

  • 均匀分布
    指数据表在每个数据源内呈现均匀分布的态势,例如:
db0
  ├── t_order0 
  └── t_order1 
db1
  ├── t_order0 
  └── t_order1

那么数据节点的配置如下:

db0.t_order0, db0.t_order1, db1.t_order0, db1.t_order1
  • 自定义分布
    指数据表呈现有特定规则的分布,例如:
db0
  ├── t_order0 
  └── t_order1 
db1
  ├── t_order2
  ├── t_order3
  └── t_order4

那么数据节点的配置如下:

db0.t_order0, db0.t_order1, db1.t_order2, db1.t_order3, db1.t_order4

分片策略配置

对于分片策略存有数据源分片策略和表分片策略两种维度。

  • 数据源分片策略
    对应于DatabaseShardingStrategy。用于配置数据被分配的目标数据源。

  • 表分片策略
    对应于TableShardingStrategy。用于配置数据被分配的目标表,该目标表存在与该数据的目标数据源内。故表分片策略是依赖与数据源分片策略的结果的。

两种策略的API完全相同。

自增主键生成策略

通过在客户端生成自增主键替换以数据库原生自增主键的方式,做到分布式主键无重复。内置的分布式主键实现有UUIDSNOWFLAKE以及LEAF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值