ShardingJDBC读写分离

news2024/12/25 13:27:00

ShardingJDBC是什么

看一看ChatGPT对他的解释:
ShardingJDBC是一个数据库连接池,它为数据库的分片和读/写拆分提供支持。它允许您跨多个物理数据库和服务器分发数据,并根据设置的配置将读写操作路由到适当的数据库。
以下是它的工作原理:
1、您可以使用数据库服务器列表配置数据库集群,并指定哪些服务器应用于读写操作。
2、将应用程序配置为使用ShardingJDBC作为连接池。
3、当应用程序需要执行数据库操作时,它会从ShardingJDBC请求连接。
ShardingJDBC根据您设置的配置将请求路由到适当的数据库服务器。如果请求是读取操作,则将其路由到指定用于读取操作的数据库服务器。如果请求是写操作,则将其路由到指定用于写操作的数据库服务器。
这有助于通过将负载分布到多个服务器并将读写操作路由到最合适的服务器来提高数据库集群的性能和可扩展性。

依赖

<!--sharding-jdbc依赖-->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.1</version>
</dependency>

数据源配置

在application.properties文件中定义数据源

#配置多个数据源
spring.shardingsphere.datasource.names=m1,m2,m3
#数据源1
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://115.29.197.4:3306/course1?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=root
#数据源2
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m2.url=jdbc:mysql://115.29.197.5:3306/course2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=root
#数据源3
spring.shardingsphere.datasource.m3.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m3.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m3.url=jdbc:mysql://115.29.197.6:3306/course2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m3.username=root
spring.shardingsphere.datasource.m3.password=root
# 指定主库和从库
# 采用静态读写分离规则
spring.shardingsphere.rules.readwrite-spliting.data-sources.readwrite-ds.type=Static
# 指定主库
spring.shardingsphere.rules.readwrite-spliting.data-sources.readwrite-ds.props.write-data-source-name=m1
# 指定从库,多个从库用逗号分割
spring.shardingsphere.rules.readwrite-spliting.data-sources.readwrite-ds.props.read-data-source-name=m2,m3
# 因为从服务器有两台,为了避免老是从一台从服务器薅羊毛,应该配置负载均衡策略
# 指定负载均衡名字
spring.shardingsphere.rules.readwrite-spliting.data-sources.readwrite-ds.load-balancer-name=lbs
# 配置负载lbs,下面是按权重负载,负载均衡策略还有RANDOM随机、ROUND_ROBIN轮询
spring.shardingsphere.rules.readwrite-spliting.load-balancers.lbs.type=WEIGHT
# m2数据库负载90%
spring.shardingsphere.rules.readwrite-spliting.load-balancers.lbs.props.m2=90
 # m3数据库负载10%
spring.shardingsphere.rules.readwrite-spliting.load-balancers.lbs.props.m3=10
# 路由过程打印到控制台方便调试
 spring.shardingsphere.props.sql-show=true

刚写的数据由于网络延迟导致读数据不一致

有时候可能会遇到执行完写操作后,立刻去读发现读不到或者读到旧状态的尴尬场景。这是由于主从同步可能存在延迟,在主节点执行完写操作,再去从节点执行读操作,读取了之前旧的状态。
解决方案:
1、强制走主库
如果你需要读取最新的数据,最好直接读主库的数据。使用下面两行代码会让sql直接走主库。
在这里插入图片描述
2、全同步复制(MGR)
也就是说主从同步的时候会阻塞你查询这个数据的操作,等同步完成之后才给你返回。
MGR要求:
1、引擎必须为 innodb,因为需事务支持在 commit 时对各节点进行冲突检查
2、每个表必须有主键,在进行事务冲突检测时需要利用主键值对比
3、必须开启 binlog 且为 row 格式
4、开启 GTID,且主从状态信息存于表中(–master-info-repository=TABLE 、–relay-log-info-repository=TABLE)–log-slave-updates 打开
5、一致性检测设置 --transaction-write-set-extraction=XXHASH64
MGR使用限制:
1、和普通复制 binlog 校验不能共存,需设置 --binlog-checksum=none
2、不支持 gap lock(间隙锁)隔离级别需设置为 read_committed
3、不支持对表进行锁操作(lock/unlock table)不会发送到其他节点执行,影响需要对表进行加锁操作的情况,列入 mysqldump 全表备份恢复操作
4、不支持 serializable(序列化)隔离级别
5、DDL 语句不支持原子性,不能检测冲突,执行后需自行校验是否一致
6、多主模式下不支持外键,单主模式不存在此问题
7、最多支持 9 个节点,超过 9 台 server 无法加入组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于java+springmvc+mybatis+vue+mysql的校园拼车系统

项目介绍 本系统采用java语言开发&#xff0c;后端采用ssm框架&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。 管理员后台页面&#xff1a; 功能&#xff1a;首页、个人中心、学生管理、司机管理、订单信息管理、接单信息管理、留言信息管理 学生后…

小米(Android)刷NetHunter安装指南,无需ssh执行kali命令

一、安装NetHunter 前提&#xff1a;确保手机已经root&#xff0c;已装上magisk。如果没有root&#xff0c;可用尝试magisk root 后执行此文 1、下载Nethunter&#xff1a;Get Kali | Kali Linux 然后push 到sdcard 里&#xff0c; 2、打开magisk&#xff0c;选择刚刚下好的…

【问答篇】Java 基础篇面试题(一)

每天进步一点~ 01、问&#xff1a;空字符串的作用 package com.neuedu.nineteen;public class Test {public static void main(String[] args) {String s"";for (char i a; i < d; i) {ssi;//输出abcsis;//输出cba}System.out.println(s);} } 答&#xff1a;如…

[附源码]Node.js计算机毕业设计高校迎新管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

(五)springcloud之Nacos注册中心-2

最近因口罩事件&#xff0c;也被“阳"了。自己在宿舍&#xff0c;闲来无事。整理下Nacos的注册中心的知识点。 模块&#xff1a; 1.父工程&#xff08;管理版本&#xff09; 2.公共模块&#xff1a;Common-API 3.测试模块&#xff1a;NacosClientConfigConsumer80 版本&am…

Vue3基础语法(⼀)

文章目录02——Vue3基础语法&#xff08;⼀&#xff09;VSCode代码片段模板语法Mustachev-once指令v-textv-htmlv-prev-bind绑定class对象语法数组语法绑定style动态绑定属性绑定一个对象v-on基本使用参数传递修饰符02——Vue3基础语法&#xff08;⼀&#xff09; 上一节中的问…

股票列表接口数据API

国内股票行情股票列表接口数据API&#xff0c;包含5分钟、日线。 JSON返回示例 { "code": "000000", "message": "success", "result": [ "2017-04-10 14:55:00,15.190,15.230,15.180,15.190,3838901", &qu…

毕业设计-基于大数据的股票预测系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

数据挖掘|主成分分析|

一、主成分分析 在实际问题中&#xff0c;我们经常会遇到研究多个变量的问题&#xff0c;而且在多数情况下&#xff0c;多个变量之间常常存在一定的相关性。由于变量个数较多再加上变量之间常常存在一定的相关性&#xff0c;势必增加了分析问题的复杂性。如何从多个变量中综合为…

2022年下半年的软考成绩今天可以查询啦!!!

自2022年11月5-6日软考考试完成后&#xff0c;经过一个多月的等待&#xff0c;终于在2022年12月15日软考成绩出来啦&#xff01; 相信很多小伙伴们都怀着激动与愉悦的心情&#xff0c;迫切想查询一下自己的成绩&#xff01; 下面是弘博创新小编整理的软考成绩查询流程。 软考成…

Python+QT美颜工具源码

程序示例精选 PythonQT美颜工具源码 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonQT美颜》编写代码&#xff0c;功能包括了亮度&#xff0c;磨皮&#xff0c;风格化&#xff0c;铅笔化…

软件测试人员一定要会的微信小程序测试点

微信小程序&#xff1a; 不需要下载安装即可使用的应用&#xff0c; 实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。 体现了“用完即走”的理念&#xff0c;用户不用关心是否安装太多应用的问题。 应用将无处不在&#xff0c;随时可用&#…

Mysql分布式锁(一)通过jvm本地锁解决mysql并发问题及可能的失效情况

强烈建议配合之前的JVM本地锁&#xff08;一&#xff09;简单实现阅读 mysql场景 将之前的场景修改为mysql场景&#xff0c;即在数据库中保存一条数据&#xff0c;多个线程并发处理该数据。 数据库建表如下 pom.xml中新增mybatis-plus和mysql <dependency><groupId…

戴尔r730xd服务器从u盘启动设置方法(戴尔r730取消网络启动方法)

1,开机后出现提示的时候&#xff0c;按F12 2,等一会系统会自动进入BIOS选择菜单:选择system bios 回车 3,这时在选择boot setting 回车: 4,在这里选择 BIOS Boot settings 5,将网卡启动的勾选去掉&#xff0c;即默认使用C盘启动 6,退出Esc&#xff0c;会提示保存&#xff0…

C#语言实例源码系列-电脑系统挂机锁

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

[附源码]Python计算机毕业设计广西助农平台Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

微服务框架 SpringCloud微服务架构 多级缓存 46 JVM 进程缓存 46.2 导入商品案例【导入Demo工程】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存46 JVM 进程缓存46.2 导入商品案例【导入Demo工程】46.2.1 导入商品管理案例demo工程46 JVM 进程缓存 …

你知道吗?Python原来可以做这些

如果你准备开始学习Python或者你已经开始了学习Python&#xff0c;那么&#xff0c;你肯能会问自己&#xff1a; “我用Python究竟能做些什么&#xff1f;” 嗯&#xff0c;这是一个棘手的问题&#xff0c;因为Python有很多应用方向。但随着时间的推移&#xff0c;我发现Pytho…

Java图书管理代码

Java图书管理代码一&#xff1a;简介二&#xff1a;核心需求三: 类的设计1. 创建图书相关的类2. 创建操作相关的类3. 创建用户相关的类4. 进行整合5. 实现具体的每个 Operation大家好&#xff0c;我是晓星航。今天为大家带来的是Java语言图书馆里系统的相关的讲解&#xff01;&…

【裂缝识别】无人机裂缝图像处理系统(带面板)【含GUI Matlab源码 1727期】

⛄一、简介 1 案例背景 随着国家对公路建设的大力投入&#xff0c;我国的公路通车总里程己经位居世界前列&#xff0c;这样进一步促进了我国经济建设的发展。随着公路的大量投运&#xff0c;公路日常养护和管理已经成为制约公路运营水平提高的瓶颈&#xff0c;特别是路面状态采…