掌握MySQL分库分表(四)分库分表中间件Sharding-Jdbc,真实表、逻辑表、绑定表、广播表,常见分片策略

ShardingSphere-JDBC是一种轻量级的数据分片解决方案,作为增强版JDBC驱动,支持多种数据库和ORM框架。文章介绍了数据节点、逻辑表、分片键等核心概念,并详细阐述了行表达式分片策略、标准分片策略、复合分片策略、Hint分片策略和不分片策略的用法。
摘要由CSDN通过智能技术生成

什么是ShardingSphere-JDBC?

  1. 它使用客户端直连数据库,以jar包形式提供服务
  2. 无需额外部署和依赖,可理解为增强版的JDBC 驱动,完全兼容JDBC和各种ORM框架,如:JPA,Hibernate,Mybatis,或直接使用JDBC
  3. 支持任何第三方的数据库连接池,如:DBCP,C3P0,BoneCP,HikariCP 等;
  4. ⽀持任意实现 JDBC规范的数据库,目前支持MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC访问的数据库
  5. 采用无中心化架构,与应用程序共享资源,适用于 Java 开发的高性能的轻量级 OLTP 应用

Sharding-Jdbc常见概念术语

数据节点Node

数据分片的最小单元,由数据源名称和数据表组成
比如:ds_0.product_order_0(某个库中的某个表)

真实表

在分片的数据库中真实存在的物理表
比如订单表 product_order_0、product_order_1、product_order_2

逻辑表

水平拆分的数据库(表)的相同逻辑和数据结构表的总称
比如订单表 product_order_0、product_order_1、product_order_2,逻辑表就是product_order

绑定表

指分片规则⼀致的主表和子表
比如product_order表和product_order_item表,均按照order_id分片,则此两张表互为绑定表关系
绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升

广播表

指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全⼀致
适用于数据量不⼤且需要与海量数据的表进⾏关联查询的场景,例如:字典表、配置表

数据库表分片(水平库、表)

包含分片键和分片策略

分片键 (PartitionKey)

⽤于分片的数据库字段,是将数据库(表)水平拆分的关键字段,比如prouduct_order订单表,根据订单号 out_trade_no做哈希取模,则out_trade_no是分片键

除了对单分片字段的支持,ShardingSphere也⽀持根据多个字段进行分片(多分片键)

行表达式分片策略 InlineShardingStrategy(必备)

只支持【单分片键】使用Groovy的表达式,提供对SQL语句中的=IN的分片操作支持
可以通过简单的配置使用,无需自定义分片算法,从而避免繁琐的Java代码开发

prouduct_order_$->{user_id % 8}

表示订单表根据user_id模8,⽽分成8张表,表名称为prouduct_order_0prouduct_order_7

标准分片策略StandardShardingStrategy(需了解)

  1. 只支持【单分片键】,提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分片算法
  2. PreciseShardingAlgorithm 精准分片是必选的,用于处理=IN的分片
  3. RangeShardingAlgorithm 范围分配是可选的,用于处理BETWEEN AND分片
  4. 如果不配置RangeShardingAlgorithm,如果SQL中用了BETWEEN AND语法,则将按照全库路由处理,性能下降

复合分片策略ComplexShardingStrategy(需了解)

⽀持【多分⽚键】,多分片键之间的关系复杂,由开发者自己实现,提供最大的灵活度
提供对SQL语句中的=INBETWEEN AND的分片操作支持

Hint分片策略HintShardingStrategy(需了解)

  1. 这种分片策略无需配置分片健,分片健值也不再从 SQL中解析,外部⼿动指定分片健或分片库,让 SQL在指定的分库、分表中执行
  2. 用于处理使用Hint行分片的场景,通过Hint而非SQL解析的方式分片的策略
  3. Hint策略会绕过SQL解析的,对于这些比较复杂的需要分片的查询,Hint分片策略性能可能会更好

不分片策略 NoneShardingStrategy(需了解)

不分片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

豆浆两块钱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值