Sharding-JDBC 基础

article/2025/9/13 11:10:26

Sharding-JDBC 是当当网开源的适用于微服务的分布式数据访问基础类库,完整的实现了分库分表,读写分离和分布式主键功能,并初步实现了柔性事务。

从 2016 年开源至今,在经历了整体架构的数次精炼以及稳定性打磨后,如今它已积累了足够的底蕴。

官方网址

Apache ShardingSphere 是一款分布式的数据库生态系统,可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。
在这里插入图片描述

支持包括 MySQL、PostgreSQL、SQL Server、Oracle、openGauss 及其他兼容 SQL-92 标准的数据库。
Archive repository
包括:
ShardingSphere-JDBC
ShardingSphere-Proxy
ShardingSphere-Agent

一、ShardingSphere-JDBC

ShardingSphere-JDBC 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。

Apache ShardingSphere-JDBC 可以通过 Java,YAML,Spring 命名空间 和 Spring Boot Starter 这 4 种方式进行配置,开发者可根据场景选择适合的配置方式。

目前仅支持 JAVA 语言

1.1 使用

1)引入 maven 依赖。

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

2)编辑 application.yml

spring:shardingsphere:datasource:names: ds_0, ds_1ds_0:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/demo_ds_0?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8username: rootpassword: ds_1:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/demo_ds_1?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8username: rootpassword: rules:sharding:tables:...

1.2 配置

配置是 ShardingSphere-JDBC 中唯一与应用开发者交互的模块,通过它可以快速清晰的理解 ShardingSphere-JDBC 所提供的功能。

ShardingSphere-JDBC 提供了 4 种配置方式,用于不同的使用场景。 通过配置,应用开发者可以灵活的使用数据分片、读写分离、数据加密、影子库等功能,并且能够叠加使用。

混合规则配置与单一规则配置一脉相承,只是从配置单一的规则项到配置多个规则项的异同。

需要注意的是,规则项之间的叠加使用是通过数据源名称和表名称关联的。 如果前一个规则是面向数据源聚合的,下一个规则在配置数据源时,则需要使用前一个规则配置的聚合后的逻辑数据源名称; 同理,如果前一个规则是面向表聚合的,下一个规则在配置表时,则需要使用前一个规则配置的聚合后的逻辑表名称。
使用示例

1.2.1 Spring Boot Starter

1)引入 Maven 依赖

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>${shardingsphere.version}</version>
</dependency>

2)配置 Spring Boot 属性
ShardingSphere-JDBC 的 Spring Boot 属性配置由 Database 名称、运行模式、数据源集合、规则集合以及属性配置组成。

# JDBC 逻辑库名称。在集群模式中,使用该参数来联通 ShardingSphere-JDBC 与 ShardingSphere-Proxy。
spring.shardingsphere.database.name= # 逻辑库名称,默认值:logic_db
spring.shardingsphere.mode.xxx= # 运行模式
spring.shardingsphere.dataSource.xxx= # 数据源集合
spring.shardingsphere.rules.xxx= # 规则集合
spring.shardingsphere.props= # 属性配置

2.1)模式配置

spring.shardingsphere.mode.type= # 运行模式类型。可选配置:Standalone、Cluster
spring.shardingsphere.mode.repository= # 持久化仓库配置。

二、ShardingSphere-Proxy

三、部署形态

Apache ShardingSphere 由 ShardingSphere-JDBC 和 ShardingSphere-Proxy 这 2 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的基于数据库作为存储节点的增量功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

3.1 ShardingSphere-JDBC 独立部署

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

  • 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;
  • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等;
  • 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC 访问的数据库。

在这里插入图片描述
在这里插入图片描述

3.2 ShardingSphere-Proxy 独立部署

ShardingSphere-Proxy 定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 目前提供 MySQL 和 PostgreSQL 协议,透明化数据库操作,对 DBA 更加友好。

  • 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用;
  • 兼容 MariaDB 等基于 MySQL 协议的数据库,以及 openGauss 等基于 PostgreSQL 协议的数据库;
  • 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端,如:MySQL Command Client, MySQL Workbench, Navicat 等。

在这里插入图片描述

3.3 混合部署架构

ShardingSphere-JDBC 采用无中心化架构,与应用程序共享资源,适用于 Java 开发的高性能的轻量级 OLTP 应用; ShardingSphere-Proxy 提供静态入口以及异构语言的支持,独立于应用程序部署,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。

四 、运行模式

Apache ShardingSphere 提供了两种运行模式,分别是单机模式和集群模式。

4.1 单机模式

能够将数据源和规则等元数据信息持久化,但无法将元数据同步至多个 Apache ShardingSphere 实例,无法在集群环境中相互感知。 通过某一实例更新元数据之后,会导致其他实例由于获取不到最新的元数据而产生不一致的错误。

适用于工程师在本地搭建 Apache ShardingSphere 环境。

4.2 集群模式

提供了多个 Apache ShardingSphere 实例之间的元数据共享和分布式场景下状态协调的能力。 它能够提供计算能力水平扩展和高可用等分布式系统必备的能力,集群环境需要通过独立部署的注册中心来存储元数据和协调节点状态。

在生产环境建议使用集群模式。


http://chatgpt.dhexx.cn/article/D2RsB3hw.shtml

相关文章

python从小白到大牛pdf 下载 资源共享_Kotlin从小白到大牛 (关东升著) 中文pdf高清版[12MB]...

本书是一本Kotlin语言学习立体教程&#xff0c;主要内容包括&#xff1a;Kotlin语法基础、Kotlin编码规范、数据类型、字符串、运算符、程序流程控制、函数、面向对象基础、继承与多态、抽象类与接口、高阶函数、Lambda表达式、数组、集合、函数式编程API、异常处理、线程、协程…

Java从小白到大牛第4篇项目实战1——PetStore宠物商店-关东升-专题视频课程

Java从小白到大牛第4篇项目实战1——PetStore宠物商店—1764人已学习 课程介绍 PetStore是Sun&#xff08;现在Oracle&#xff09;公司为了演示自己的Java EE技术&#xff0c;而编写的一个基于Web宠物店项目。PetStore是典型的电子商务项目&#xff0c;是现在很多电商平台的…

Sharding-JDBC(二)- Sharding-JDBC介绍

文章目录 一、Sharding-JDBC介绍1. Sharding-JDBC介绍2. Sharding-JDBC与JDBC性能对比 二、Sharding-JDBC快速入门1. 需求说明2. 环境搭建2.1 环境说明2.2 创建数据库2.3 引入maven依赖 3. 编写程序3.1 分片规则配置3.2.数据操作3.3.测试 4. 流程分析5. 其他集成方式5.1 Spring…

2022年适合初学者的Python书籍推荐

一、前言 网上有很多Python书或者视频&#xff0c;种类繁多该怎么选择&#xff1f; 看书全是文字看就了眼睛累&#xff0c;也容易厌倦&#xff0c;看视频有时候又觉得讲的慢&#xff0c;有其他方案吗&#xff1f; 其实&#xff0c;关于自学python&#xff0c;找一本浅显易懂&…

师傅带徒弟学:Python游戏开发引擎cocos2d-python-关东升-专题视频课程

师傅带徒弟学&#xff1a;Python游戏开发引擎cocos2d-python—299人已学习 课程介绍 Python语言之所以受欢迎&#xff0c;很大的原因是有很多可以使用的库&#xff0c;Python社区也有很多游戏开发库&#xff0c;其中较为优秀有&#xff1a;Cocos2d、Pyglet和Pygame&#xf…

关东升的《从零开始学Swift》即将出版

大家好&#xff1a; 苹果2015WWDC大会发布了Swift2.0&#xff0c;它较之前的版本Swift1.x有很大的变化&#xff0c;所以我即将出版《从零开始学Swift》《从零开始学Swift》将在《Swift开发指南》第1版的基础上添加Swift2.0的内容&#xff0c;同时摒弃第1版的一些不合理的内容&a…

最新出炉!《看漫画学Python 2》电子版火爆来袭,300页全新版PDF开放下载,零基础小白入门首选!

很多刚开始接触Python的朋友都会有一个共同的烦恼&#xff0c;自学好无聊&#xff0c;好枯燥&#xff0c;不想坚持了……所以秉持着让学Python好玩有趣的态度&#xff0c;给大家推荐一本最新出炉的“漫画书”《看漫画学Python 2》&#xff01; 图书简介&#xff1a;Python是一门…

关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了

关东升的《iOS实战&#xff1a;图形图像、动画和多媒体卷&#xff08;Swift版&#xff09;》上市了 承蒙广大读者的厚爱我的《iOS实战&#xff1a;图形图像、动画和多媒体卷&#xff08;Swift版&#xff09;》京东上市了&#xff0c;欢迎广大读者提出宝贵意见。。http://item.j…

关东升 IOS

51CTO博客大赛我的参赛主页http://blog.51cto.com/contest2013/701759期待您的一票&#xff01; 同时有好礼相送&#xff0c;欢迎学习iOS的小伙伴观看我的iOS入门免费系列课程如下&#xff1a; Objective C编程基础 &#xff08;24课时&#xff09; 只要4金币 iOS开发基础入门 …

Shell Date命令

shell Date命令 1、Date命令 date %Y 以四位数字格式打印年份 date %y 以二位数字格式打印年份 date %m 月份 date %d 日期 date %H 小时 date %M 分钟 date %S 秒 date %w 星期&#xff0c;如果结果显示0&#xff0c;则表示周日前一天的日期 date -d "-1 day" %d前…

Linux命令date命令

A.将日期转换为Unix时间戳 将当前时间以Unix时间戳表示&#xff1a; date %s 转换指定日期为Unix时间戳&#xff1a; date -d 2018-05-25 18:20 %s B.将Unix时间戳转换为日期时间 不指定日期时间的格式&#xff1a; date -d 1361542596 指定日期格式的转换&#xff1a; …

linux date输出时分秒,linux的date命令

date命令 在linux里面shell脚本打印时间。 date语法 date (选项)(参数)(date后面必须加空格)。 选项有下面几种 -d"字符串"&#xff1a;显示字符串所指定的时间&#xff1b; -s"字符串"&#xff1a;根据字符串设置时间&#xff1b; -u:显示GMT&#xff1b;…

Linux date命令

date命令是Linux中常用的一个命令&#xff0c;主要作用就是显示本机当前时间。如下&#xff1a; 在本人Linux操作系统中&#xff0c;date命令默认实现格式为年月日-星期-时分秒&#xff0c;然后是CST中央标准时间。不过&#xff0c;你也可以自行修改显示格式&#xff0c;如&…

Bash中的Date命令

Date命令可以用于显示时间和修改系统时间 这个就是查看当前时间 Date有很多时间代表符&#xff0c;而且各个代表符之间可以自定义多种符号 Linux有两个时钟&#xff0c;硬件时钟和系统时钟 clock是硬件时钟&#xff0c;而且clock只有root可以操作 clock与date之间可能会有差异&…

Linux命令之date命令详细讲解

一、date命令简介   Linux date命令可以用来显示或设定系统的日期与时间。在显示方面使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记。在备份文件的时候我们常结合此命令生成当前日期和时间的文件名。格式符前面以加号开头&#xff0c;若是不以加号作…

Linux命令之date命令

一、date命令简介 Linux date命令可以用来显示或设定系统的日期与时间。在显示方面使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记。在备份文件的时候我们常结合此命令生成当前日期和时间的文件名。格式符前面以加号开头&#xff0c;若是不以加号作为开…

turtle科赫雪花的源码分析

python turtle&#xff0c;科赫雪花源码 #KochDrawV1.py #导入海龟画图的基本库 import turtle #koch函数是是对科赫函数的基本绘制 def koch(size,n):if n 0:turtle.fd(size)else:for angle in [0,60,-120,60]:turtle.left(angle)koch(size/3, n-1) #main函数是对科赫函数的…

python科赫雪花小包裹_034 实例8-科赫雪花小包裹-Go语言中文社区

一、"科赫雪花小包裹"问题分析 1.1 科赫雪花 高大上的分形几何 分形几何是一种迭代的几何图形&#xff0c;广泛存在于自然界中 科赫曲线&#xff0c;也叫雪花曲线 1.2 用Python绘制科赫曲线 二、"科赫雪花小包裹"实例讲解(上) 2.1 科赫曲线的绘制 递归思想…

python科赫曲线编程实现雪花下落的效果_Python笔记 :科赫雪花曲线(计算思维训练1)...

提要&#xff1a;基于MOOC的“Python语言程序设计基础”&#xff0c;主讲人&#xff1a;嵩天。基本算是课本笔记。 科赫雪花曲线设计思路 一、三种人类思维特征 逻辑思维&#xff1a;推理和演绎&#xff0c;数学为代表&#xff1b; 实证思维&#xff1a;实验和验证&#xff0c;…

科赫雪花——python画图

1.什么是科赫雪花 科赫曲线是一种分形。其形态似雪花&#xff0c;又称科赫雪花、雪花曲线。 科赫曲线是出现在海里格冯科赫的论文中&#xff0c;是分形曲线中的一种。 科赫雪花是以等边三角形三边生成的科赫曲线组成的。每条科赫曲线的长度是无限大&#xff0c;它是连续而无…