ShardingSphere:强大的分布式数据库中间件【图文】

ShardingSphere的诞生

ShardingSphere的结构

Sharding-JDBC :它提供了一个轻量级的 Java 框架,在 Java 的 JDBC 层提供额外的服务。使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。Sharding-JDBC主要用于嵌入到应用程序中,使应用程序能够透明地使用分片和读写分离功能,而无需对应用程序进行大规模修改。

Sharding-Proxy :它以代理的形式部署在应用程序与数据库之间,实现了对 SQL 的解析和改写以及请求的转发。用户无需修改任何应用程序代码,只需通过配置文件或 API 接口进行分片规则设置,即可实现数据分片和读写分离等功能。Sharding-Proxy主要用于需要将数据库访问透明地分片化的情况,而不想在应用程序中引入Sharding-JDBC的情况。它也可以用于监控和审计数据库操作。

Sharding-Sidecar :它将作为一个独立的微服务,为用户提供更为灵活和强大的数据分片、分布式事务和数据治理等功能。Sarding-SideCar 主要用于云原生环境。目前正在开发

ShardingSphere支持的水平分片和垂直分片的不同

垂直分片:是在应用层面上进行的一种策略,它主要是为了解决单台数据库性能瓶颈的问题,将数据根据业务逻辑分类进行分片存储。每个表中的数据会被分散到不同的数据库中。它的优点是能够减轻单个库的负载压力,方便数据维护等;缺点是没有根本解决单库数据量过大、并发性高的性能瓶颈,并且可能会产生跨服务的事务一致性问题。在应用模块间存在较强耦合关系的情况下,这种策略可能更适合使用。
水平分片:是在数据库层面上进行的一种策略,能够将数据根据某种规则分散至多个库或表中,每个分片仅包含数据的一部分。例如,可以根据某个字段(或某几个字段),如主键进行分片存储。这种策略可以有效地解决单库数据量过大、并发性高的性能瓶颈,提高系统的稳定性和负载能力。水平分片在理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是分库分表的标准解决方案。

执行一条sql语句时,ShardingSphere的步骤解析

ShardingSphere 解析配置信息,并且支持将配置信息上传到第三方注册中心。
将要执行的 SQL 语句解析。
根据解析上下文匹配数据库和表的分片策略,并生成 SQL 的路由路径。

ShardigSphere根据用户给的SQL语句通过改写引擎修改为在数据库中执行的语句
SQL改写分为正确性改写和优化改写。
ShardingSphere 采用一套自动化的执行引擎,负责将路由和改写完成之后的真实 SQL 安全且高效发送到底层数据源执行。
结果归并:将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端。ShardingSphere 内部实现了流式归并和内存归并两种方案。

面对读写分离情况,ShardingSphere如何处理的?

数据源配置:首先,在应用程序的配置中,你需要配置多个数据库数据源,包括主库(用于写操作)和多个从库(用于读操作)。每个数据源都有一个唯一的名称和连接信息。

SQL解析:当应用程序发送SQL查询请求时,ShardingSphere的SQL 执行引擎会拦截并解析SQL语句。

读写分离规则:ShardingSphere通过读写分离规则来确定查询应该发送到主库还是从库。这些规则可以在配置文件中定义,通常基于SQL的类型(SELECT、INSERT、UPDATE、DELETE)来决定路由。

路由查询:根据读写分离规则,Sharding-JDBC将查询请求路由到适当的数据源。如果是SELECT查询,它将路由到一个从库;如果是INSERT、UPDATE或DELETE操作,它将路由到主库。这确保了写操作总是发送到主库,而读操作可以发送到从库,以分担主库的负载。

执行查询:一旦确定了目标数据源,Sharding-JDBC会将查询请求转发到相应的数据库。主库用于写操作,从库用于读操作。

返回结果:数据库执行查询后,将结果返回给Sharding-JDBC,然后Sharding-JDBC将结果返回给应用程序。

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

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

相关文章

模板小细节与了解STL

1、模板小细节 1、在C中&#xff0c;已经写好了有关swap函数来供我们使用&#xff1a; 2、编译器也会偷懒&#xff0c;除非我们给强制要求&#xff1a; 通过调试我们可以看到&#xff0c;编译器不会主动去找模板&#xff0c;这时候我们要在add后加<>即可让Add使用模板函…

免费的 ChatGPT、GPT4.0、GPTs、Midjourney-AI绘画(国内版)

&#x1f525;博客主页&#xff1a;只恨天高 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容…

鸿蒙原生应用元服务-访问控制(权限)开发场景与权限声明

一、场景介绍 应用的APL&#xff08;Ability Privilege Level&#xff09;等级分为normal、system_basic和system_core三个等级&#xff0c;默认情况下&#xff0c;应用的APL等级都为normal等级。权限类型分为system_grant和user_grant两种类型。 二、配置文件权限声明 应用需要…

Docker 入门介绍及简单使用

Docker 的简单介绍 中文官网&#xff1a;Docker中文网 官网 英文官网&#xff1a;Docker: Accelerated Container Application Development Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包应用及其依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 …

(十二)C++自制植物大战僵尸游戏多用户存档实现(一)

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs 游戏存档 游戏存档允许玩家保存游戏进度&#xff0c;以便在之后的时间继续游戏。通过存档&#xff0c;玩家可以暂停游戏并在需要时重新开始&#xff0c;而不必从头开始或重新完成已经完成的任务。游戏通常提供多个…

HarmonyOS开发实战:【亲子拼图游戏】

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式益智拼图游戏&#xff0c;可以两台设备同时开启一局拼图游戏&#xff0c;每次点击九宫格内的图片&#xff0c;都会同步更新两台设备的图片位置。效果图如下&#xff1a; 说明&#xff1a; 本示例涉及使…

OWASP发布10大开源软件风险清单

3月20日&#xff0c;xz-utils 项目被爆植入后门震惊了整个开源社区&#xff0c;2021 年 Apache Log4j 漏洞事件依旧历历在目。倘若该后门未被及时发现&#xff0c;那么将很有可能成为影响最大的软件供应链漏洞之一。近几年爆发的一系列供应链漏洞和风险&#xff0c;使得“加强开…

对桥接模式的理解

目录 一、背景二、桥接模式的demo1、类型A&#xff08;形状类型&#xff09;2、类型B&#xff08;颜色类型&#xff09;3、需求&#xff1a;类型A要使用类型B&#xff08;如&#xff1a;红色的方形&#xff09;4、Spring的方式 一、背景 在《对装饰器模式的理解》中&#xff0…

“手撕“数组一些简单的习题

目录 1.数组转字符串 2.数组拷贝 3.求数组中元素的平均值 4.查找数组中指定元素(顺序查找) 5.查找数组中指定元素(二分查找) 6.数组排序(冒泡排序) 7.数组逆序 1.数组转字符串 先让我们看看为什么要转字符串&#xff1a; int[] arr {1,2,3,4,5,6}; System.out.printl…

实验案例二:配置路由器实现互通

一.实验环境 实验用具包括两台路由器&#xff08;或交换机)&#xff0e;一根双绞线缆&#xff0c;一台PC&#xff0c;一条Console线缆。 二.需求描述 如图6.14所示&#xff0c;将两台路由器的Gig0/0接口相连&#xff0c;通过一台PC连接设备的Console端口并配置IP地址&#x…

分享一个纯HTML外贸公司通用企业html网站模板源码

纯HTML外贸公司通用企业html网站模板源码 源码地址&#xff1a;https://download.csdn.net/download/Highning0007/89150720

Jenkins用maven风格build报错解决过程记录

1、Jenkins2.453新建项目&#xff0c;构建风格选的maven 2、自由风格构建部署没有任何问题&#xff0c;但是maven风格build一直失败&#xff0c;报错如下图 3、解决方案&#xff1a;在系统管理–系统配置–Maven项目配置&#xff0c;删除全局MAVEN_OPT的路径信息&#xff0c;…

2.4G漂移小车电子方案 酷得智能科技

漂移高速遥控车是一种专门设计用于执行高速漂移动作的遥控车模型。以下是一些关于漂移高速遥控车的功能介绍&#xff1a; 1、高速性能&#xff1a;漂移车通常配备有强力的电机和电池&#xff0c;以便在保持高速的同时进行漂移动作。 2、漂移能力&#xff1a;漂移车的轮胎和悬挂…

Samtec应用分享 | 汽车应用中的视觉系统

【前言】 视觉系统在未来的汽车设计中扮演着关键的角色。 在过去&#xff0c;一直是由驾驶员掌握和应对道路上的危险&#xff0c;但现代车辆在保障驾驶安全方面发挥着前所未有的作用。 视觉系统&#xff0c;无论是可见光摄像头还是先进的探测系统&#xff0c;如激光雷达&…

【Java】通过poi给word首页添加水印图片

背景&#xff1a; poi并没有提供直接插入水印图片的方法&#xff0c;目前需要再word的首页插入一张水印图片&#xff0c;于是就需要通过另一种方式&#xff0c;插入透明图片&#xff08;png格式&#xff09;并将图片设置为“浮于文字上方”的方式实现该需求。 所需jar&#xf…

使用python采集VIP会电商平台商品数据②单页数据采集

获取标头&#xff1a; 响应&#xff1a;服务器返回的数据 预览&#xff1a;查看响应得数据 载荷&#xff1a;查询参数/请求参数 标头&#xff1a;查看请求的网址/请求的标头/请求方法 数据包地址&#xff1a;https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/mo…

Servlet-Filter实现反爬虫

以前用DotNetCore实现过反爬虫功能。在tomcat里面可以利用Servlet的Filter类实现请求的控制来达到反爬虫功能&#xff0c;进而增强JRT的web安全。 实现黑名单过滤器&#xff0c;对在黑名单列表的IP的所有请求都跳转到警告页面&#xff0c;业务各种请求自行定义加入黑名单 /* …

Yolo-world+Python-OpenCV之摄像头视频实时目标检测

上一次介绍了如何使用最基本的 Yolo-word来做检测&#xff0c;现在我们在加opencv来做个实时检测的例子 基本思路 1、读取离线视频流 2、将视频帧给yolo识别 3、根据识别结果 对视频进行绘制边框、加文字之类的 完整代码如下&#xff1a; import datetimefrom ultralytics …

电竞陪玩系统开发平台搭建(小程序,公众号,app)线上线下皆有,线下计算距离。

六大核心功能 1.游戏陪练:可以选择当下火爆的游戏内容&#xff0c;选择游戏大神、职业玩家进行陪练&#xff0c;也可约附近路人玩家或是身边的小伙伴语音组队开黑&#xff0c;一起享受边玩游戏边吐槽的无限乐趣。 2.约玩交友:除了游戏陪玩功能&#xff0c;系统还设置了单独的语…

SpringBlade dict-biz/list SQL 注入漏洞复现

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…