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

2024-04-17 05:52

本文主要是介绍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将结果返回给应用程序。

这篇关于ShardingSphere:强大的分布式数据库中间件【图文】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910955

相关文章

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的