# Sharding-JDBC从入门到精通(2)- Sharding-JDBC 介绍

news2024/11/22 10:22:46

Sharding-JDBC从入门到精通(2)- Sharding-JDBC 介绍

一、概述-分库分表所带来的问题

1、分库分表带来的问题

分库分表能有效的缓解了单机和单库带来的性能瓶颈和压力,突破网络 IO、硬件资源、连接数的瓶颈,同时也带来了一些问题。

2、分库分表带来的问题 :事务一致性问题

由于分库分表把数据分布在不同库甚至不同服务器,不可避免会带来分布式事务问题。

3、分库分表带来的问题 :跨节点关联查询

1)在没有分库前,我们检索商品时可以通过以下 SQL 对店铺信息进行关联询

SELECT P.*,r.[地理区域名称],5.[店铺名称],s.[信誉]FROM「商品信息]P
LEFT J0IN[地理区域]r ON p.[产地]=r.[地理区域编码]LEFT JOIN[店铺信息]s ON p.id = s.[所属店铺]WHERE...ORDER BY...LIMIT...

2)但垂直分库后[商品信息]和[店铺信息]不在一个数据库,甚至不在一台服务器,无法进行关联查询。

3)可将原关联查询分为两次查询,第一次查询的结果集中找出关联数据 id, 然后根据 id 发起第二次请求得到关联数据,最后将获得到的数据进行拼装。

4、分库分表带来的问题 :跨节点分页、排序函数

1)跨节点多库进行查询时,limit 分页、order by 排序等问题,就变得比较复杂了。需要先在不同的分片节点中将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序。

2)如,进行水平分库后的商品库,按 ID 倒序排序分页,取第一页:

跨节点分页、排序函数.png

3)以上流程是取第一页的数据,性能影响不大,但由于商品信息的分布在各数据库的数据可能是随机的,如果是取第 N 页,需要将所有节点前 N 页数据都取出来合并,再进行整体的排序,操作效率可想而知。所以请求页数越大,系统的性能也会越差。

4)在使用 Max、Min、Sum、Count 之类的函数进行计算的时候,与排序分页同理,也需要先在每个分片上执行相应的函数,然后将各个分片的结果集进行汇总和再次计算,最终将结果返回。

5、分库分表带来的问题 :主键避重

在分库分表环境中,由于表中数据同时存在不同数据库中,主键值平时使用的自增长将无用武之地,某个分区数据库生成的 ID 无法保证全局唯一。因此需要单独设计全局主键,以避免跨库主键重复问题。

主键避重.png

6、分库分表带来的问题 :公共表

1)实际的应用场景中,参数表、数据字典表等都是数据量较小,变动少,而且属于高频联合查询的依赖表。电商业务例子中地理区域表也属于此类型。

2)可以将这类表在每个数据库都保存一份,所有对公共表的更新操作都同时发送到所有分库执行。

3)由于分库分表之后,数据被分散在不同的数据库、服务器。因此,对数据的操作也就无法通过常规方式完成,并且它还带来了一系列的问题。好在,这些问题不是所有都需要我们在应用层面上解决,市面上有很多中间件可供我们选择,其中 Sharding-JDBC 使用流行度较高。

二、概述-Sharding-JDBC 介绍

1、sharding-JDBc 介绍

Sharding-JDBC, 它定位为轻量级 java 框架,在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

1)sharding-JDBc 是当当网研发的开源分布式数据库中间件,从 3.0 开始 Sharding-JDBC 被包含在 shardingSphere 中,之后该项目进入进入 Apache 孵化器,4.0 版本之后的版本为 Apache 版本。

2)ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar (计划中)这3款相互独立的产品组成。

他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、容器、云原生等各种多样化的应用场景。

3)ShardingSphere 官方地址 :

https://shardingsphere.apache.org/document/current/cn/overview/

4)Sharding-JDBC 的核心功能为数据分片和读写分离,通过 Sharding:JDBc,应用可以透明的使用 Jdbc 访问已经分库分表、读写分离的多个数据源,而不用关心数据源的数量以及数据如何分布。

  • 适用于任何基于 java 的 ORM 框架,如:Hibernate,Mybatis,SpringJDBC Template 或直接使用 JDBC。
  • 基于任何第三方的数据库连接池,如:DBCP, C3P0,BoneCP, Druid, HikariCp 等。
  • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL

2、Sharding-JDBC 的工作方式

使用 Sharding-Jdbc 前需要人工对数据库进行分库分表,在应用程序中加入 Sharding-Jdbc 的 jar 包,应用程序通过 Sharding-Jdbc 操作分库分表后的数据库和数据表,由于 Sharding-Jdbc 是对 Jdbc 驱动的增强,使用 Sharding-JDBC 就像使用 JDBC 驱动一样,在应用程序中是无需指定具体要操作的分库和分表的。

Sharding-JDBC.png

三、概述-Sharding-JDBC 介绍-与 jdbc 性能对比

1、Sharding-JDBC 与 jdbc 性能对比:性能损耗测试

服务器资源充足、并发数相同,比较 JDBC 和 Sharding-JDBC 性能损耗,Sharding-JDBC 相对 IDBC 损耗不超过 7%。

基准测试性能对比

业务场景JDBCSharding-JDBC1.5.2sharding-JDBC1.5.2/JDBC损耗
单库单表查询4934704.7%
单库单表更新668263035.7%
单库单表插入685563757%
业务场景业务平均响应时间(ms)业务TPS
JDBC单库单表查询7493
Sharding-JDBC 1.5.2单库单表查询8470

2、性能对比测试:

服务器资源使用到极限,相同的场景 JDBC 与 Sharding-JDBC 的吞吐量相当。

3、性能对比测试:

服务器资源使用到极限,Shtrding-JDBC 采用分库分表后,Sharding-JDBC 吞吐量较 JDBC 不分表有接近 2 倍的提升。

4、JDBC 单库两库表与 Sharding-JDBC 两库各两表对比

业务场景JDBC单库两表Sharding-JDBC两库各两表性能提升至
查询17363331192%
更新917017997196%
插入1157423043199%

5、JDBC 单库单表与 Sharding-JDBC 两库各一表对比

业务场景JDBC单库单表Sharding-JDBC两库各一表性能提升至
查询15862944185%
更新954818561194%

上一节关联链接请点击
# Sharding-JDBC从入门到精通(1)- 概述-分库分表

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

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

相关文章

容器进程

一、容器进程和宿主机进程的关系 容器在进程空间上和宿主机是隔离的,每创建一个容器,该容器都有一个独属的进程空间简称PID NameSpace。但是容器本质也是一个进程,自然是由其父进程创建的,这个可以使用ps aux命令验证。 | 容器视…

Thinger.io 支持多协议、插件化100%开源 IoT 企业级物联网平台

项目源码,文末联系小编 Thinger.io 是一个开源插件化物联网平台,提供了设备原型、扩展和设备连接管理所需的一切工具。我们的目标是使物联网的使用民主化,使其可供全世界使用,并简化大型物联网项目的开发。 01 Thinger.io 物联网平…

【C++】哈希表 --- 闭散列版本的实现

在无人问津日子里 正是登峰造极的好时机 ——《人民日报》 哈希表 --- 闭散列版本的实现 1 C中的哈希表2 哈希表底层2.1 功能2.1 哈希冲突2.3 开散列与闭散列 3 闭散列版本的实现3.1 框架搭建3.2 仿函数设计3.3 插入函数3.4 查找函数3.5 删除函数 Thanks♪(・ω&a…

windows 10 安装tcping 使用教程

1 官网下载:tcping下载 2 复制tcping 到win10系统目录C:\Windows\System32 3 tcping 网址测试,可以指定端口 4 tcping 测试端口联通 5 tcping http模式

LeetCode 算法: 合并 K 个升序链表 c++

原题链接🔗:合并 K 个升序链表 难度:困难⭐️⭐️⭐️ 题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists […

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer,ZeRO)算法实现,一个来自DeepSpeed,另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来,以供最终用户在训练/微调模型时自主选择其中之…

Python | Leetcode Python题解之第191题位1的个数

题目: 题解: class Solution:def hammingWeight(self, n: int) -> int:ret 0while n:n & n - 1ret 1return ret

PAE:从潮流报告中提炼有效产品属性

本文将介绍PAE,一种用于包含 PDF格式的文本和图像的产品属性提取算法。目前大部分的方法侧重于从标题或产品描述中提取属性,或利用现有产品图像中的视觉信息。与之前的工作相比,PAE从潮流趋势报告的PDF文件中提取属性,提取的属性包…

ISO26262标准

什么是ISO26262? ISO 26262(国际功能安全标准)是一个涵盖整个汽车产品开发过程的汽车功能安全标准。ISO 26262继承或改编自工业自动化行业的安全要求标准IEC61508,但专门为汽车行业量身定制。最新版本是ISO26262-1:2018。 它包括诸如需求分析、安全分析…

一个简单的文件上传功能

代码如下&#xff1a; PostMapping("/upload")public ResponseEntity<String> handleFileUpload(RequestParam(value "uploadDirectory") String uploadDirectory,RequestParam("fileName") MultipartFile fileName) {try {// 确保文件不…

乱扔垃圾自动识别摄像头

如今&#xff0c;随着城市化进程的加快和人们生活水平的提高&#xff0c;环境保护和城市美观成为社会关注的焦点。乱扔垃圾问题长期困扰着城市管理者和居民&#xff0c;给城市环境卫生带来严重挑战。为了有效解决这一问题&#xff0c;乱扔垃圾自动识别摄像头应运而生&#xff0…

nvm-desktop window安装,支持动态切换nodejs版本

一、安装 nvm-desktop 概述 1 、卸载干净笔记的nodejs 和nodejs的环境变量 2、安装 nvm-desktop 软件 3、配置环境变量 4、测试功能 # 此时已安装完成 其他&#xff1a;常见nodejs的问题解决参考&#xff1a;官网 mac 安装教程 https://github.com/1111mp/nvm-desktop/blob/…

大模型微调实战之基于星火大模型的群聊对话分角色要素提取挑战赛:Task01:跑通Baseline

目录 0 背景1 环境配置1.1 下载包1.2 配置密钥1.3 测试模型 2 解决问题2.1 获取数据2.2 设计Prompt2.2 设计处理函数2.3 开始提取 附全流程代码 0 背景 Datawhale AI夏令营第二期开始啦&#xff0c;去年有幸参与过第一期&#xff0c;收获很多&#xff0c;这次也立马参与了第二…

基于Python的求职招聘管理系统【附源码】

摘 要 随着互联网技术的不断发展&#xff0c;人类的生活已经逐渐离不开网络了&#xff0c;在未来的社会中&#xff0c;人类的生活与工作都离不开数字化、网络化、电子化与虚拟化的数字技术。从互联网的发展历史、当前的应用现状和发展趋势来看&#xff0c;我们完全可以肯定&…

AI视界引擎 | ​基于 YOLOv8 和计算机视觉 CV 的实时识别系统!

本文来源公众号“AI视界引擎”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;​基于 YOLOv8 和计算机视觉 CV 的实时识别系统&#xff01; 技术进步和创新正在尽可能地推进作者的日常生活&#xff0c;但仍有很大一部分社会群体因为…

OverTheWire Bandit 靶场通关解析(中)

介绍 OverTheWire Bandit 是一个针对初学者设计的网络安全挑战平台&#xff0c;旨在帮助用户掌握基本的命令行操作和网络安全技能。Bandit 游戏包含一系列的关卡&#xff0c;每个关卡都需要解决特定的任务来获取进入下一关的凭证。通过逐步挑战更复杂的问题&#xff0c;用户可…

poi-tl 生成 word 文件(插入文字、图片、表格、图表)

文章说明 本篇文章主要通过代码案例的方式&#xff0c;展示 poi-tl 生成 docx 文件的一些常用操作&#xff0c;主要涵盖以下内容 &#xff1a; 插入文本字符&#xff08;含样式、超链接&#xff09;插入图片插入表格引入标签&#xff08;通过可选文字的方式&#xff0c;这种方…

昇思MindSpore学习笔记3--张量 Tensor

一、张量Tensor概念 矢量、标量和其他张量的计算函数&#xff0c;有内积、外积、线性映射以及笛卡儿积等 张量坐标在 n 维空间内&#xff0c;有 nr 个分量 每个分量都是坐标的函数,变换时每个坐标分量都按规则作线性变换 张量是一种特殊的数据结构&#xff0c;类似于数组和…

haproxy实现代理和负载均衡

HaProxy介绍&#xff1a; haproxy是法国开发者威利塔罗在2000年使用C语言开发的一个开源软件&#xff0c;是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支持正则表达式及web状态统计&…

狼人杀系列

目录 杀人游戏&#xff08;天黑请闭眼&#xff09; &#xff08;1&#xff09;入门版 &#xff08;2&#xff09;标准版 &#xff08;3&#xff09;延伸版——百度百科 &#xff08;3.1&#xff09;引入医生和秘密警察 &#xff08;3.2&#xff09;引入狙击手、森林老人和…