Sharding JDBC 学习了解 - 总览和概念

news2024/9/28 17:28:08

第一部分:概述

  • ShardingSphere是一个由一套分布式数据库中间件解决方案组成的开源生态圈,包括Sharding-JDBC、Sharding-Proxy和Sharding-Proxy 3个独立产品。
  • 它们都提供了数据分片、分布式事务、数据库编排等功能,适用于Java同构、异构语言、云原生等多种场景。
  • ShardingSphere将自己定义为一个中间件,而不是一种全新的数据库。 关系数据库作为众多企业的基石,仍然占据着巨大的市场份额。因此,现阶段我们更愿意关注它的增量,而不是彻底的颠覆。

1.1 Sharding-JDBC

Sharding-JDBC将自己定义为一个轻量级的Java框架,在Java JDBC层提供额外的服务。客户端直接连接数据库,以jar的形式提供服务,不需要额外的部署和依赖。 它可以被认为是一个增强的 JDBC 驱动程序,它完全兼容 JDBC和各种 ORM 框架。

  • 适用于任何基于 JDBC 的 ORM 框架,如 JPA、Hibernate、Mybatis、Spring JDBC Template 或直接使用 JDBC。
  • 支持任何第三方数据库连接池,如DBCP、C3P0、BoneCP、Druid、HikariCP。
  • 支持任何类型的 JDBC 标准数据库:MySQL、Oracle、SQLServer、PostgreSQL 以及任何遵循 SQL92 的数据库。

特征(1) 数据库分片&表分片(2) 读写分离(3) 分片策略定制(4) 无中心分布式主键


1.2 Sharding-Proxy

Sharding-Proxy将自己定义为透明的数据库代理,提供封装数据库二进制协议以支持异构语言的数据库服务器。 对DBA来说更加友好,现在提供的MySQL版本可以使用任何兼容MySQL协议的终端(例如MySQL Command Client、MySQL Workbench等)来操作数据。

  • 对应用程序完全透明,可以直接像MySQL一样使用。
  • 适用于任何兼容MySQL、PostgreSQL协议的终端。

1.3 Sharding-Sidecar(TODO)

目前(2023年12月22日)还没没有完成。

Sharding-Sidecar(TODO)将自己定义为 Kubernetes 环境的云原生数据库代理,以 sidecar 的形式负责所有对数据库的访问。 它提供了一个与数据库交互的网格层,我们称之为Database Mesh。

Database Mesh强调如何将分布式数据库访问应用程序与数据库连接起来。 以交互为中心,有效地组织了杂乱的应用程序与数据库之间的交互。 使用Database Mesh访问数据库的应用程序和数据库将形成一个大的网格系统,只需将它们相应地放置到正确的位置即可。 它们都受网格层的控制。


对比

Sharding-JDBCSharding-ProxySharding-Sidecar
数据库任何MySQLMySQL
连接计数成本高的低的高的
支持的语言仅限 Java任何任何
表现低损耗相对较高的损耗低损耗
去中心化是的
静态条目是的

特点总结:

  • Sharding-JDBC采用去中心化架构,适用于Java开发的高性能轻量级OLTP应用;
  • Sharding-Proxy提供静态入口和全语言支持,适用于OLAP应用和分片数据库管理和操作场景。
  • ShardingSphere是一个由多个端点共同组成的生态圈。
  • 通过Sharding-JDBC和Sharding-Proxy的混合使用以及同一注册中心统一的分片策略,ShardingSphere可以构建适用于各种场景的应用系统。 架构师可以更自由地将系统架构调整为最适合当前业务的架构。


第二部分:快速入门

2.1 Sharding-JDBC

主要包括以下三步:

  1. 导入maven依赖
  2. 分片规则配置
  3. 创建数据源

Step 1 导入maven依赖

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-core</artifactId>
    <version>${latest.release.version}</version>
</dependency>

Step 2 分片规则配置
Sharding-JDBC 可以通过四种方式进行配置:Java、YAML、Spring namespace 和 Spring boot starter。
开发者可以根据不同的情况选择合适的方法。

Step 3 创建数据源
使用ShardingDataSourceFactory和规则配置对象创建ShardingDataSource,ShardingDataSource是由标准JDBC接口DataSource实现的。然后,用户可以使用原生的JDBC或JPA、MyBatis等ORM框架进行开发。

DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props);

2.2 Sharding-Proxy

Todo


2.3 Sharding-Scaling(Alpha)

Todo



核心概念和特征

背景

传统的将所有数据存储在一个集中节点的解决方案在性能、可用​​性和运营成本三个方面已经很难满足海量互联网数据场景的需求。

  • 在性能上,关系型数据库大多采用B+树索引。当数据量超过阈值时,更深的索引会增加磁盘IO访问次数,从而削弱查询性能。同时,高并发请求也使得中心化数据库成为系统的最大限制。
  • 在可用性方面,可以通过无状态服务以相对较低的成本、任意程度的扩容,最终将所有的压力都落在数据库身上。但单一数据节点或者简单的主从结构已经越来越难以承受这些压力。因此,数据库的可用性就成为整个系统的关键。
  • 从运营成本方面来看,当数据库实例中的数据达到阈值以上时,DBA的运营压力也会增加。随着数据量的增加,数据备份和数据恢复的时间成本将更加不可控。一般来说,单库情况下的数据在1TB以内是一个比较合理的范围。

在传统关系数据库无法满足互联网需求的情况下,越来越多的尝试将数据存储在原生分布式NoSQL中。但其与SQL的不兼容以及生态系统的不完善,使其无法在竞争中击败关系数据库,因此关系数据库仍然占据着不可动摇的地位。

分片是指 将一个数据库中的数据按照一定的标准切分到多个表和数据库中,从而提高性能和可用性。 两种方法都可以有效避免由于数据超过可承受阈值而导致的查询限制。更重要的是,数据库分片还可以有效分散TPS。分表虽然不能缓解数据库压力,但可以提供将分布式事务转移到本地事务的可能性,因为一旦涉及到跨库升级,分布式事务有时会变得相当棘手。采用多主从分片方式,可以有效避免数据集中于一个节点,提高架构可用性。

  • 通过分库分表进行数据拆分是应对高TPS、海量数据系统的有效方法,可以使数据量保持在阈值以下,疏散流量。

分片方式可以分为垂直分片水平分片


垂直分片

按照业务分片的方式,称为垂直分片,或者说纵向分片,其核心理念是数据库的专用化。在分片之前,数据库由很多表组成,对应不同的业务。但分片后,**表按照业务分到不同的数据库,压力也分到不同的数据库。**下图给出了根据业务需求,通过垂直分片将用户表和订单表分配到不同数据库的解决方案。

垂直分片需要不时调整架构和设计。总体来说还不够快,无法应对互联网业务快速变化的需求,无法真正解决单节点问题。它可以缓解高数据量和并发量带来的问题,但不能完全解决。垂直分片后,如果表中的数据量仍然超过单节点阈值,则应进一步进行水平分片处理。
在这里插入图片描述

水平分片

水平分片也称为横向分片。与垂直分片按照业务逻辑进行分类的方法相比,水平分片通过一定的字段,按照一定的规则将数据分类到多个数据库或表中,每个分片只包含部分数据。

例如,根据主键分片,偶数主键放入0数据库(或表),奇数主键放入1数据库(或表)。

理论上,水平分片克服了单机数据处理量的限制,并且可以相对自由地扩展,因此可以作为分库分表的标准解决方案。

挑战和目标

分片虽然解决了性能、可用​​性、单节点备份恢复等问题,但其分布式架构在获取利润方面也带来了一些新的问题。

  • 一个问题是,面对如此分散的数据库和表格,应用开发工程师和数据库管理员的操作变得异常费力。他们应该确切地知道要从哪个数据库表获取数据。
  • 另一个挑战是,在单节点数据库中正确运行的SQL在分片数据库中可能并不正确。分片后表名改变,或者分页、order by、聚合group by等操作导致的误操作就是这样的例子。
  • 跨数据库事务也是分布式数据库需要处理的一件棘手的事情。合理使用分表还可以在单​​表数据量减少时充分利用本地事务。 通过明智地使用同一个数据库中的不同表,可以避免分布式事务带来的麻烦。当跨库事务无法避免时,部分业务仍然需要保持事务一致。

互联网巨头并没有大量采用基于XA的分布式事务,因为他们无法保证其在高并发情况下的性能。它们通常用最终一致的软状态替换强一致的事务。

ShardingSphere数据分片模块的主要设计目标是尽量减少分片的影响,让用户像使用一个数据库一样使用水平分片数据库组。

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

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

相关文章

【音视频】remb twcc原理

目录 twcc简介 WebRTC REMB 参考文档 twcc简介 TWCC全称是Transport wide Congestion Control&#xff0c;是webrtc的最新的拥塞控制算法。其原理是在接收端保存数据包状态&#xff0c;然后构造RTCP包反馈给发送端&#xff0c;反馈信息包括包到达时间、丢包状态等&#xff…

开源路由工具NextTrace Web

什么是 NextTrace &#xff1f; NextTrace 是一个由 Golang 语言开发的开源可视路由工具。它不仅支持 IPv4 和 IPv6 协议&#xff0c;而且在轻量级的同时&#xff0c;提供了快速、准确的路由信息。不论您是网络管理员、开发者还是普通用户&#xff0c;NextTrace 都是您网络问题…

【English】水果单词小小汇总~~

废物研究生&#xff0c;只要不搞科研干啥都是开心的&#xff0c;啊啊啊啊啊科研要命。作为一个水果怪&#xff08;每天不吃水果就要命的那种哈哈哈哈&#xff09;突然发现竟然就知道什么apple、banana、orange&#xff01;惭愧惭愧&#xff0c;正好兴致正浓&#xff0c;来整理一…

编写第一个APP自动化脚本 appium_helloworld ,将脚本跑起来

一、前置说明 我们把学习 Appium 的第一个脚本称为 appium_helloworld&#xff0c;它用于展示 Appium 的基本用法&#xff0c;验证配置和环境是否正确。 Appium 自动化操作 APP 的基本流程&#xff08;Android平台&#xff09;&#xff1a; 启动 Appium Serveradb 连接设备&…

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测分类效果基本描述程序设计参考…

Python的基本数据类型和数据类型的转换

TOC 数据类型 类型查看 type 可以使用type内置函数查看变量所指的对象类型 a1 b1.0 c"1" d1, e[1] f{1:1} g{1}print(type(a)) print(type(b)) print(type(c)) print(type(d)) print(type(e)) print(type(f)) print(type(g))isinstance **如字面意思,isinstance()…

Flask+Mysql项目docker-compose部署(Pythondocker-compose详细步骤)

一、前言 环境&#xff1a; Linux、docker、docker-compose、python(Flask)、Mysql 简介&#xff1a; 简单使用Flask框架写的查询Mysql数据接口&#xff0c;使用docker部署&#xff0c;shell脚本启动 优势&#xff1a; 采用docker方式部署更加便于维护&#xff0c;更加简单快…

多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测

多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | …

CUMT--Java复习--文件及IO流

目录 一、文件 1、文件系统和路径 2、File类 3、FilenameFilter接口 二、IO流 1、流的分类 2、流的体系结构 三、字节流 1、InputStream 2、OutputStream 四、字符流 1、Reader 2、Writer 五、过滤流和转换流 1、过滤流 2、转换流 六、序列化 1、对象序列化…

继承易错总结

1.继承会将所有的成员继承下来&#xff0c;但是继承方式限定的是继承下来成员的可见类型(如果是private继承&#xff0c;那么他不论哪里都是不可见的&#xff1b;如果是protected继承在类中是可见的&#xff0c;在类外是不可见的&#xff1b;如果是public继承&#xff0c;在任何…

[机器人-2]:开源MIT Min cheetah机械狗设计(二):机械结构设计

目录 1、四肢朝向的选择 2、电机布局形式的选择 3、电机的选型及测试&#xff08;非常重要&#xff09; 4、结构优化 5、尺寸效应 6、其他 1、四肢朝向的选择 机械狗的结构设计&#xff0c;第一个摆在我们面前的就说四肢的朝向问题&#xff0c;如下图&#xff0c;我们是…

白龙地铁消费项目(地铁消费系统,包括用户端、管理端)

大一学的C#可视化项目文件&#xff0c;所有功能均可使用。可以直接下载 下方是演示照片

Vue 3 Composition API:让组件开发更高效、灵活(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

修改第三方npm包

文章目录 一、前言二、补丁方案2.1、patch-package2.2、pnpm patch 三、换日方案四、总结五、最后 一、前言 在开发过程中&#xff0c;发现某个npm包有Bug&#xff0c;应该怎么办&#xff1f;可以试试下面这2种方案&#xff1a; 代码量少&#xff0c;可以直接修改npm包代码的&…

【计算机四级(网络工程师)笔记】操作系统运行机制

目录 一、中央处理器&#xff08;CPU&#xff09; 1.1CPU的状态 1.2指令分类 二、寄存器 2.1寄存器分类 2.2程序状态字&#xff08;PSW&#xff09; 三、系统调用 3.1系统调用与一般过程调用的区别 3.2系统调用的分类 四、中断与异常 4.1中断 4.2异常 &#x1f308;嗨&#xff…

【LeetCode】每日一题 2023_12_25 不浪费原料的汉堡制作方案(数学,解二元一次方程)

文章目录 刷题前唠嗑题目&#xff1a;不浪费原料的汉堡制作方案题目描述代码与解题思路 结语 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;不浪费原料的汉堡制作方案 题目链接&#xff1a;1276. 不浪费原料的汉堡制作方案 题…

详解—数据结构—<常用排序>基本实现和代码分析

目录 一.排序的概念及其运用 1.1排序的概念 1.2排序运用​编辑 1.3 常见的排序算法​编辑 二.常见排序算法的实现 2.1 插入排序 2.1.1基本思想&#xff1a; 2.1.2直接插入排序&#xff1a; 2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序 2.2.1基本思想&#xff1a; …

大模型工具:LangChain 原理与实战案例

LangChain 是什么&#xff1f; LangChain是一个用于开发由语言模型驱动的应用程序的框架。它使得可以构建以下类型的应用程序&#xff1a; 数据感知&#xff1a;将语言模型与其他数据源连接起来 智能&#xff1a;允许语言模型与其环境进行交互 LangChain的主要价值在于&…

【JavaSE】Java进阶知识一(泛型详解,包括泛型方法,协变,逆变,擦除机制)

目录 泛型 1. 什么是泛型 2.泛型方法 3.通配符上界&#xff08;泛型的协变&#xff09; 4.通配符下界&#xff08;泛型的逆变&#xff09; 5.泛型的编译&#xff08;擦除机制&#xff09; 泛型 泛型&#xff1a;就是让一个类能适用于多个类型&#xff0c;就是在封装数据结…

前端---vscode 的基本使用

1. vscode 的基本介绍 全拼是 Visual Studio Code (简称 VS Code) 是由微软研发的一款免费、开源的跨平台代码编辑器&#xff0c;目前是前端(网页)开发使用最多的一款软件开发工具。 2. vscode 的安装 下载网址: Download Visual Studio Code - Mac, Linux, Windows选择对应…