当前位置: 首页 > 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(需了解)

不分片

相关文章:

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

文章目录什么是ShardingSphere-JDBC?Sharding-Jdbc常见概念术语数据节点Node真实表逻辑表绑定表广播表数据库表分片(水平库、表)分片键 (PartitionKey)行表达式分片策略 InlineShardingStrategy(必备)标准分片策略Stan…...

2022-06-16_555时基的迷人历史和先天缺陷!

https://www.eet-china.com/news/magazine220608.html 555时基的迷人历史和先天缺陷! 发布于2022-06-16 03:39:12 LARRY STABILE 流行数十年的555时基,业内不知晓的工程师应该寥寥无几!几乎所有的数字电路教材中,都有该芯片的身影…...

SpringBoot 基础知识汇总

一、环境准备Java:Spring Boot 3.0.2 需要 Java 17,并且与 Java 19 兼容Maven:Apache Maven 3.5 或更高版本兼容二、启动器以下应用程序启动器由 Spring Boot 在该组下提供:org.springframework.boot表 1.Spring 引导应用程序启动…...

centos7下用kvm启动Fedora36 Cloud镜像

环境 os:centos7 Arch: aarch64 安装qemu-kvm yum install qemu-kvm kvm virt-install libvirt systemctl start libvirtd.service创建镜像 下载aarch64架构的Fedora36镜像 wget https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/36/Cloud/aarch64/images/Fedora-Cl…...

修复 K8s SSL/TLS 漏洞(CVE-2016-2183)指南

作者:老 Z,中电信数智科技有限公司山东分公司运维架构师,云原生爱好者,目前专注于云原生运维,云原生领域技术栈涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。 前言 测试服务器配置 主机名IPCPU内存系…...

uniapp 引入彩色symbol和 指令权限

uniapp 引入iconfont图标库彩色symbol 1,先去阿里巴巴矢量图标库登录 然后点击下载至本地 2.下载本地,然后解压文件夹 3.打开终端cmd命令窗口 npm安装全局包npm i -g iconfont-tools 4.终端切换到上面解压的文件夹里面,运行iconfont-too…...

【C语言】初识结构体

Yan-英杰 悟已往之不谏 知来者之可追 目录 一、结构体的声明 二、结构体变量的定义和初始化 三、结构体成员的访问 四、结构体传参 一、结构体的声明 1.结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。2.结构的…...

前端将base64图片转换成file文件

1、base64转成file具体代码 // base64图片转file的方法(base64图片, 设置生成file的文件名)function base64ToFile(base64, fileName) {// 将base64按照 , 进行分割 将前缀 与后续内容分隔开let data base64.split(,);// 利用正则表达式 从前缀中获取图…...

OAK相机跑各种yolo模型的检测帧率和深度帧率

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…...

存储拆分后,如何解决唯一主键问题?

在单库单表时,业务 ID 可以依赖数据库的自增主键实现,现在我们把存储拆分到了多处,如果还是用数据库的自增主键,就会出现主键重复的情况。 所以我们不得不面对的一个选择,就是ID生成器,使用一个唯一的字符…...

仿射变换学习

affine_trans_(iamge,region,xld):仿射变换-作用到iamge,region、xld等都可以 vector_angle_to_rigid():得到一个刚性仿射变换矩阵 orientation_region():得到指定区域的弧度(与x轴正方向的弧度&#xff09…...

基于java的爬虫框架webmagic基本使用

简单记录一下java项目实现网页爬取数据的基本使用. 需要引入的依赖 <dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.3</version></dependency><dependency><grou…...

Python每日一练(20230221)

目录 1. 不同路径 II 2. 字符串转换整数 (atoi) 3. 字符串相乘 1. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为“Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中…...

【Linux】vim拒绝服务安全漏洞修复

根据国家信息安全漏洞共享平台于2023年2月19日发布的安全漏洞通知&#xff0c;Linux系统自带的vim编辑器存在两个高危安全漏洞&#xff08;CNVD-2023-09166、CNVD-2023-09647&#xff09;&#xff0c;攻击者可以利用该漏洞发起拒绝服务攻击&#xff0c;并可能运行&#xff08;恶…...

moveit 2源码编译

文章目录前言下载编译过程创建开发环境拉取源代码更新rosdep下载安装moveit 2依赖包编译源码输出结果总结前言 本文用来记录moveit 2从源码编译的全流程。 本机环境&#xff1a; 系统&#xff1a;debian 11 ros版本&#xff1a;ros2 humble 处理器&#xff1a;intel i7 内存&a…...

2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块(4)

目录 二、竞赛注意事项 &#xff08;本模块20分&#xff09; 一、项目和任务描述&#xff1a; 二、服务器环境说明 三、具体任务&#xff08;每个任务得分以电子答题卡为准&#xff09; A-1任务一 登录安全加固&#xff08;Windows&#xff09; 1.密码策略 a.更改或创建…...

微服务保护之sentinel熔断器

文章目录 目录 文章目录 前言 一、解决微服务雪崩的问题 二、使用步骤 三、熔断器的使用 3.1 限流规则 3.1.1流控模式 3.1.2流控效果 3.2 隔离和降级 3.2.1 隔离 3.2.2 降级 四、sentinel规则持久化 总结 前言 在基于 SpringCloud 构建的微服务体系中&#xff0c;服务间的调用…...

电动打气泵方案开发--鼎盛合PCBA方案

开车的每一个司机都必须要知道一个事情——定期检查轮胎气压是否正常&#xff0c;因为轮胎胎压不足会导致轮胎过早磨损&#xff0c;从而造成容易发生道路交通事故&#xff0c;并且对汽车的操控性和牵引力带来不良影响&#xff0c;甚至会出现爆胎或汽车失控等极其危险的事故。电…...

第十三届蓝桥杯省赛 C++ A 组 F 题、Java A 组 G题、C组 H 题、Python C 组 I 题——青蛙过河(AC)

目录1.青蛙过河1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路Ac_code1.C2.Java1.青蛙过河 1.题目描述 小青蛙住在一条河边, 它想到河对岸的学校去学习。小青蛙打算经过河里 的石头跳到对岸。 河里的石头排成了一条直线, 小青蛙每次跳跃…...

django项目实战四(django+bootstrap实现增删改查)进阶时间控件

接上一篇《django项目实战三&#xff08;djangobootstrap实现增删改查&#xff09;进阶分页》 知识点&#xff1a; 使用bootstrap-datepicker实现时间控件 一、优化layout.html模版 主要新增2个块 {% block css %}{% endblock %}{% block js %}{% endblock %} {% load static…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...