当前位置: 首页 > news >正文

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

文章目录

  • 什么是ShardingSphere-JDBC?
  • Sharding-Jdbc常见概念术语
    • 数据节点Node
    • 真实表
    • 逻辑表
    • 绑定表
    • 广播表
  • 数据库表分片(水平库、表)
    • 分片键 (PartitionKey)
    • 行表达式分片策略 InlineShardingStrategy(必备)
    • 标准分片策略StandardShardingStrategy(需了解)
    • 复合分片策略ComplexShardingStrategy(需了解)
    • Hint分片策略HintShardingStrategy(需了解)
    • 不分片策略 NoneShardingStrategy(需了解)

什么是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(需了解)

不分片

http://www.lryc.cn/news/14824.html

相关文章:

  • 2022-06-16_555时基的迷人历史和先天缺陷!
  • SpringBoot 基础知识汇总
  • centos7下用kvm启动Fedora36 Cloud镜像
  • 修复 K8s SSL/TLS 漏洞(CVE-2016-2183)指南
  • uniapp 引入彩色symbol和 指令权限
  • 【C语言】初识结构体
  • 前端将base64图片转换成file文件
  • OAK相机跑各种yolo模型的检测帧率和深度帧率
  • 存储拆分后,如何解决唯一主键问题?
  • 仿射变换学习
  • 基于java的爬虫框架webmagic基本使用
  • Python每日一练(20230221)
  • 【Linux】vim拒绝服务安全漏洞修复
  • moveit 2源码编译
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块(4)
  • 微服务保护之sentinel熔断器
  • 电动打气泵方案开发--鼎盛合PCBA方案
  • 第十三届蓝桥杯省赛 C++ A 组 F 题、Java A 组 G题、C组 H 题、Python C 组 I 题——青蛙过河(AC)
  • django项目实战四(django+bootstrap实现增删改查)进阶时间控件
  • Jetpack之ViewModel
  • 追梦之旅【数据结构篇】——详解C语言动态实现顺序表
  • xss基础
  • 移动WEB开发二、流式布局
  • 分享在线预约系统制作步骤_在线预约链接怎么做
  • 【每日一题Day125】LC1326灌溉花园的最少水龙头数目 | 动态规划 贪心
  • C# FFmpeg推流Vlc.DotNet拉流优化参数
  • pnpm v8版本升级变化关注点(前瞻速攻版)
  • Python基础-环境安装
  • 重载、重写、重构概念辨析
  • 第九章 - 多表查询(join,left join 等)与合并查询(union union all)