Sharding JDBC使用入门

Sharding JDBC

https://shardingsphere.apache.org/index_zh.html

4.x开始apache孵化
在这里插入图片描述

Sharding JDBC 不是做分库分表的,它是用来去操作已经分库分表好的数据

  • 主要功能
    1. 数据分片
    2. 读写分离

数据分片

概念

https://shardingsphere.apache.org/document/current/cn/features/sharding/concept/

数据库与表
db0
  ├── t_order_0 
  ├── t_order_1 
  ├── t_order_item_0
  ├── t_order_item_1
  └── config
db1
  ├── t_order_0 
  ├── t_order_1
  ├── t_order_item_0
  ├── t_order_item_1
  └── config
  • 逻辑表与真实表
    把一个水平拆分的 逻辑表 t_order,拆分为真实表 t_order_0到t_order_9。

  • 数据节点
    t_order_0的 数据节点为 db0.t_order_0。
    t_order整体的数据节点配置为: db0.t_order_0, db0.t_order_1, db1.t_order_0, db1.t_order_1

  • 绑定表
    如 t_order表和t_order_item表里 order_id字段存在对应关系,均按照order_id分片可以使对应的列会在相近的真实表,则此两张表互为绑定表关系
    即:
    t_order_0里关联的数据都在t_order_item_0 里
    t_order_1里关联的数据都在t_order_item_1 里

  • 广播表
    广播表表结构和表中的数据在每个分片数据库中均完全一致
    db0.config 完全等于 db1.config

分片键

用于分片的数据库字段

  1. SQL 中如果无分片字段,则无法进行分片,将全路由执行,性能较差
  2. 当分片键处于运算表达式中时,无法通过 SQL 字面提取用于分片的值,将导致全路由。
  3. 不能将原生自增主键同时作为分片键使用。
分片算法

单分片键多分片键 通过 =、IN、 BETWEEN 进行分片

分片算法灵活度非常高。

  1. 可由开发者自行实现,
  2. 也可使用 Apache ShardingSphere 内置的分片算法语法糖( 包括取模、哈希、范围、时间等常用分片算法的实现),
强制分片路由

分片字段并非由 SQL 而是其他外置条件决定的场景,在 Apache ShardingSphere 中叫做 Hint。
Hint行分片 进行分片

分片策略

分片策略:分片键和分片算法 的组合

1.2.3.是解析SQL里的分片字段来分片
4.是非SQL决定,而由其他外置条件决定的场景

  1. 标准分片策略 (StandardShardingStrategy)
    单分片键 + 精确分片算法【必选】 + 范围分片算法【可选】
    作用: 对SQL语句中 单分片键的 =, IN和BETWEEN AND的分片操作

  2. 复合分片策略 (ComplexShardingStrategy)
    多分片键 + 开发者实现算法 (直接将分片键值组合以及分片操作符透传至分片算法,完全由应用开发者实现)
    作用: 对SQL语句中 多分片键的 =, IN和BETWEEN AND的分片操作

  3. 行表达式分片策略 (InlineShardingStrategy)
    Groovy表达式配置的 单分片键 + 精确分片算法
    作用: 用Groovy的表达式 对SQL语句中 单分片键的 =和IN的分片操作。避免繁琐的Java代码开发

  4. Hint分片策略 (HintShardingStrategy)
    通过Hint而非SQL解析的方式分片的策略。

  5. 不分片策略 (NoneShardingStrategy)

行表达式

通过行表达式可以有效的简化数据节点配置
在配置中使用${ expression }$->{ expression }标识行表达式即可

支持数据节点和分片算法这两个部分的配置。行表达式的内容使用的是Groovy的语法

springBoot 使用

https://github.com/xu1211/mysql-jsonNotes/tree/shardingJdbc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyc1211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值