《ShardingSphere JDBC?Sharding JDBC?》基本小白脱坑问题

        因为在短链接中的很多操作也需要依靠sharding JDBC来完成所以同时也在短链接的文章中。

        在网上看了很多文章,可能是因为技术的迭代等等原因,看的越多蒙的越快。在学习的道路上梳理一下,希望可以帮助到别的小伙伴。

官网地址: 

Apache ShardingSphere

第一问:为啥现在都在说ShardingSphere JDBC?那Sharding JDBC没了?

不是的,ShardingSphere JDBC(前身称为Sharding-JDBC)并不是包含多个独立组件,而是一个统一的数据库访问层解决方案的组成部分。它是一个轻量级的Java框架,通过提供一套完整的JDBC驱动的方式来透明化分库分表操作,使得用户能够像操作单个数据库一样操作分布式的数据库集群。

ShardingSphere JDBC 是 Apache ShardingSphere 项目的一部分,主要聚焦于数据库水平拆分场景,提供了数据分片、读写分离、柔性事务以及分布式治理等功能,且无需额外部署和依赖中间件即可与应用程序一同启动运行。

在架构上看,虽然Apache ShardingSphere作为一个整体的数据平台解决方案包含了多个组件,例如:

  • ShardingSphere JDBC:适用于任何兼容JDBC的数据库,将分片、读写分离等功能以jar包的形式内嵌到应用程序中。
  • ShardingSphere Proxy:作为独立的数据库代理服务,提供更丰富的数据库路由策略和服务治理能力。
  • ShardingSphere Sidecar:在云原生场景下,作为Kubernetes的Sidecar模式部署,为无侵入式数据分片提供支持。

但对于单一的ShardingSphere JDBC而言,并没有多个独立的子组件之说,它是作为一个整体单元工作的。

第二问:ShardingSphere JDBC?那这个和ShardingJDBC有什么区别?

提到的“ShardingSphere JDBC”实际上是对原先“Sharding-JDBC”的更新和升级后的名称。随着项目的演进和发展,原本的“Sharding-JDBC”项目整合进了更为全面的“Apache ShardingSphere”大数据处理生态系统中,并按照功能和形态划分为不同的产品线,其中就包括了“ShardingSphere JDBC”。

因此,“ShardingSphere JDBC”和“Sharding-JDBC”实质上指的是同一事物的不同阶段:

  • Sharding-JDBC:最初是指的一个专注于在Java应用中进行数据库分片(sharding)的轻量级框架,通过JDBC驱动扩展的方式实现在应用端的数据库水平扩展能力。

  • ShardingSphere JDBC:随着项目发展,该项目被纳入到了更广泛的Apache ShardingSphere项目之下,并正式更名为“ShardingSphere JDBC”,其不仅保留了原有的数据库分片功能,还可能增加了更多如分布式事务、数据治理等企业级特性,成为了Apache ShardingSphere项目中针对Java应用环境下的一个模块。

所以,现在大家所说的“ShardingSphere JDBC”就是以前“Sharding-JDBC”的延续和发展,具备更强大的功能和更完善的设计。

第三问:那如果我项目中本来使用的是ShardingJDBC那我如何升级使用呢?

要从旧版本的Sharding-JDBC升级到ShardingSphere JDBC的较新版本,请遵循以下一般性步骤:

步骤1:确认目标版本

首先,查看ShardingSphere官方发布的升级文档,了解您当前正在使用的Sharding-JDBC版本可以平滑升级到哪个ShardingSphere JDBC的版本,以及各个版本之间的兼容性和重大变更说明。

步骤2:分析现有配置

由于不同版本之间可能会有配置项的变动或移除,你需要对比当前使用的Sharding-JDBC配置与目标版本的ShardingSphere JDBC配置要求:

  • application.properties 或 application.yml 中的配置前缀和属性名可能会有所改变,比如前面提到的Sharding-JDBC 3.0升至4.0时的配置项前缀调整。
  • 分片规则、读写分离策略等配置也可能发生结构变化,需对照新版本文档进行适配。

步骤3:更新依赖

在构建工具(如Maven或Gradle)的依赖管理中,将Sharding-JDBC的依赖替换为ShardingSphere JDBC相应的新版本依赖。

步骤4:迁移代码

如果您的代码中直接引用了Sharding-JDBC相关的API,检查是否有相应的API接口或类发生了变动,确保更新后的API使用正确。

步骤5:测试验证

完成上述更改后,进行全面的功能和性能测试,确保升级后系统功能正常,性能满足预期,并解决可能出现的任何兼容性问题。

步骤6:阅读官方升级指南

具体升级过程应当参照Apache ShardingSphere官方网站发布的升级指南,因为每个版本间的迁移可能都有特定的注意事项和详细步骤:

  • 查阅官方文档:https://shardingsphere.apache.org/document/current/en/upgrade-guide/
  • 查看对应版本的Release Notes:https://shardingsphere.apache.org/document/current/en/releases/

请务必仔细阅读对应版本的官方升级指导文档,以获取最准确、最新的升级步骤和建议。

第四问:SHARDINGSPHERE-JDBC和SHARDINGSPHERE-PROXY的区别

Apache ShardingSphere 的 ShardingSphere-JDBC 和 ShardingSphere-Proxy 是两种不同的产品形态,用于解决分布式数据库环境下的数据分片、读写分离、数据治理等场景问题,但它们在架构设计和应用场景上有所区别:

ShardingSphere-JDBC:

  • 架构与集成方式:ShardingSphere-JDBC 是一个轻量级的 jar 包,设计为与应用程序进程内嵌合,即通过 jar 化服务的形式无缝集成到业务应用中,通过增强JDBC驱动的方式实现透明化的数据库访问代理。
  • 性能与资源消耗:由于直接运行在应用服务器进程中,无网络传输开销,性能损耗相对较小,适合对性能要求较高的场景。
  • 适用场景:非常适合于新开发或者存量较少,需要进行分库分表改造的Java应用项目,特别是OLTP(在线事务处理)场景,例如高并发交易系统。

ShardingSphere-Proxy:

  • 架构与集成方式:ShardingSphere-Proxy 则是一个独立的服务进程,充当数据库中间件的角色,对外表现为MySQL/PostgreSQL等数据库服务器,客户端无需任何改动,像连接普通数据库一样连接Proxy。
  • 性能与资源消耗:虽然增加了网络通信环节,但由于其集中式管理的特点,对于复杂查询优化、多租户场景等有较好的支持,并且能统一管理和运维,资源消耗相对更大,但可以通过横向扩展来提高服务能力。
  • 适用场景:适用于不希望侵入业务代码进行改造,或是涉及多种语言混合开发的项目,以及对分析型查询(OLAP)需求较高或对数据库运维友好的场景,因为它可以作为统一的数据入口,简化整体架构。

总结来说:

  • 如果正在使用的项目完全基于Java,并且希望保持高度的性能和灵活性,同时能够在代码级别深度整合数据库分片等功能,那么ShardingSphere-JDBC会是一个更好的选择。
  • 而如果需要支持多种编程语言的数据库访问,或者期望通过中间件的方式来统一管控复杂的分布式数据库集群,那么ShardingSphere-Proxy的中间件模式则更为合适。

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

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

相关文章

git stash 正确用法

目录 一、背景 二、使用 2.1 使用之前,先简单了解下 git stash 干了什么: 2.2 git stash 相关命令 2.3 使用流程 1. 执行 git stash 2. 查看刚才保存的工作进度 git stash list 3. 这时候在看分支已经是干净无修改的(改动都有暂存到 stash) 4. 现在…

Fusion OS

1 VMware workstation搭建华为FusionCompute实验环境 VMware workstation搭建华为FusionCompute实验环境(三)保姆级安装教程,可运行虚拟机-CSDN博客 在VMware Workstation以及云服务器上安装华为FusionCompute_vm安装华为存储模拟软件-CSDN…

C# ICloneable的特点及其用法

在C#中,ICloneable 是一个接口,用于定义允许一个对象创建自身的精确副本,即“克隆”的能力。ICloneable 接口只包含了一个方法:Clone,该方法在实现时应该返回当前对象的一个副本。 这里是 ICloneable 接口的定义&…

git提交代码冲突

用idea2023中的git提交代码,出现 error: Your local changes to the following files would be overwritten by merge: ****/****/****/init.lua Please commit your changes or stash them before you merge. Aborting 出现这个错误可能是因为你的本地修改与远…

Leetcode 3039. Apply Operations to Make String Empty

Leetcode 3039. Apply Operations to Make String Empty 1. 解题思路2. 代码实现 题目链接:3039. Apply Operations to Make String Empty 1. 解题思路 这一题的话其实挺简单的,想清楚的话其实最后一轮遗留的字符必然是出现频率最高的一个或多个字符的…

SpringBoot常见问题

1 引言 Spring Boot是一个基于Spring框架的快速开发脚手架,它简化了Spring应用的初始化和搭建过程,提供了众多便利的功能和特性,比如自动配置、嵌入式Tomcat等,让开发人员可以更加专注于业务逻辑的实现。   Spring Boot还提供了…

单机启动/开机启动SpringBoot服务的正确方式

此操作只针对于测试环境或单机部署的情况下,使用Jenkins自动化部署或docker部署SpringBoot服务请忽略。 SpringBoot单机启动和集群启动的区别: 部署方式:单机启动可以直接运行jar文件或使用IDE启动应用程序,而双机集群启动需要将…

[鸿蒙开发]一款便捷开发的本地关系数据操作框架

# cjdb## 简介_cjdb 是一套简化数据库操作,面相程序开发的简洁架构,正在不断完善中,欢迎各位大佬指正_#### CJDBUtil API1. init(config: { context: any, dbName?: string, securityLevel?: relationalStore.SecurityLevel }): Promise<void> 2. query\<T>(c…

MySQL全量备份

一、实验素材 1.创建student和score表 (1) student表 create database school; use schoolCREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) );(…

C++项目 -- 高并发内存池(五)释放内存过程

C项目 – 高并发内存池&#xff08;五&#xff09;释放内存过程 文章目录 C项目 -- 高并发内存池&#xff08;五&#xff09;释放内存过程一、Thread Cache释放内存1.完善FreeList功能2.Thread Cache释放内存 二、Central Cache释放内存三、Page Cache释放内存四、释放内存过程…

Pytorch关于CIFAR-10测试

下载 CIFAR-10数据集&#xff1a; 官网&#xff1a;https://www.cs.toronto.edu/~kriz/cifar.html CIFAR-10的网络结构&#xff1a; import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential#定义网络结构 class Model(nn.Mo…

shell脚本控制模板判断

读取 ip文件列表 执行脚本 #!/bin/bash declare hj$1 echo $hj function duqu01(){ while :;do cat /root/wwd/0206/ip_list01|while read m s;do declare $m declare $s echo ‘’ echo $mastet’asdasdasdasd’ echo $slave’bbbbbbbbbb’ done #exit 0 done } function duq…

【社区投稿】Rust登陆华为鸿蒙操作系统之Native模块开发

Rust登陆【华为鸿蒙】操作系统之Native模块开发 名词解释 【鸿蒙操作系统】的英文全名是Open Harmony Operation System。正文将以其首字母缩写词ohos引用该词条。【鸿蒙软件开发工具包】的英文全名是Open Harmony Software Development Kit。正文也将以它的首字母缩写词ohsdk引…

【矩阵】托普利茨矩阵

每日一道算法题之托普利茨矩阵 一、题目描述二、思路三、C代码 一、题目描述 题目来源&#xff1a;LeetCode 给你一个 m x n 的矩阵 a 。如果这个矩阵是托普利茨矩阵&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果矩阵上每一条由左上到右下的对角线上…

SQL查询数据是否存在

SQL查询是否存在 count优化总结 根据某一条件从数据库表中查询是否有数据存在。 大多数时候&#xff0c;我们习惯性使用count。 count 大多数时候&#xff0c;我们在业务中会“肌肉记忆”&#xff0c;使用count来做这样的需求 mapper.xml中&#xff1a; <select id"c…

C++-带你初步走进继承(1)

1.继承的概念及定义 1.1继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段&#xff0c;它允许程序员在 保 持原有类特性的基础上进行扩展 &#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承 呈现了面向对象 …

如何在IDEA中使用固定公网地址SSH远程连接服务器开发环境

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

【牛客】寒假训练营1 H-01背包,但是bit 题解

传送门&#xff1a;01背包&#xff0c;但是bit 标签&#xff1a;动态规划 题目大意 共有n件物品&#xff0c;每件物品有价值vi与重量ui两个属性。但特别地&#xff0c;所选物品的总重量并不是每件物品的重量和&#xff0c;而是所有所选物品的重量进行按位或运算的结果。请你计…

Compose 1.6 发布:性能大升级、拖放新功能、文本新变化...

翻译自&#xff1a; https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html 基于 1 月 24 号的 Compose 发行计划&#xff0c;我们正式推出了 Jetpack Compose 1.6 版本。 作为 Android 平台备受推崇的原生 UI 工具包&…

P4447 [AHOI2018初中组] 分组题解

题目 小可可的学校信息组总共有n个队员&#xff0c;每个人都有一个实力值。现在&#xff0c;一年一度的编程大赛就要到了&#xff0c;小可可的学校获得了若干个参赛名额&#xff0c;教练决定把学校信息组的n个队员分成若干个小组去参加这场比赛。 但是每个队员都不会愿意与实…