万隆的笔记 万隆的笔记
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
  • ShardingSphere简介
  • ShardingSphere-JDBC
    • 概述
    • 主要功能
    • 内部结构
    • 初始化流程
    • 使用过程
    • 常见配置
  • 数据分片剖析
  • 读写分离剖析
  • 强制路由剖析
  • 数据脱敏剖析
  • 分布式事务剖析
  • SPI 加载剖析
  • 编排治理剖析
  • ShardingSphere-Proxy
  • ShardingSphere-Sidecar(TODO)
  • ShardingShpere
2022-03-24
目录

ShardingSphere-JDBC

# ShardingSphere-JDBC

ShardingSphere-JDBC-快速入门 (opens new window)

ShardingSphere-JDBC-开发者使用手册 (opens new window)

# 概述

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 访问的数据库。

shardingsphere-jdbc_v3

# 主要功能

ShardingSphere-JDBC主要提供给开发者数据分片、分布式事务、数据库治理等功能。

  • 数据分片:分库分表、读写分离、分片策略、分布式主键
  • 分布式事务;标准化的事务接口、XA强一致性事务、柔性事务
  • 数据库治理:配置动态化、编排和治理、数据脱敏、可视化链路追踪

这些功能都是配置化的,用官方的话就是:配置是 ShardingSphere-JDBC 中唯一与应用开发者交互的模块。在我们使用ShardingSphere-JDBC的时候参考官方开发者使用手册 (opens new window)即可,不用死记硬背。

# 内部结构

ShardingSphere-JDBC主要内部结构,如下图:

sharding_jdbc_class

  • 图中黄色部分表示的是Sharding-JDBC的入口API,采用工厂方法的形式提供。 目前有ShardingDataSourceFactory和MasterSlaveDataSourceFactory两个工厂类。
    • ShardingDataSourceFactory:支持分库分表、读写分离操作
    • MasterSlaveDataSourceFactory:支持读写分离操作
  • 图中蓝色部分表示的是Sharding-JDBC的配置对象,提供灵活多变的配置方式。
    • ShardingRuleConfiguration:是分库分表配置的核心和入口,它可以包含多个TableRuleConfiguration和MasterSlaveRuleConfiguration(LinkedList)。
    • MasterSlaveRuleConfiguration:封装的是读写分离配置信息。
    • TableRuleConfiguration:封装的是表的分片配置信息,有5种配置形式对应不同的Configuration类型。
      • 1.StandardShardingStrategyConfiguration:标准分片策略配置
      • 2.ComplexShardingStrategyConfiguration:复合分片策略配置
      • 3.HintShardingStrategyConfiguration:Hint 分片策略配置
      • 4.InlineShardingStrategyConfiguration:Inline分片策略配置
      • 5.NoneShardingStrategyConfiguration:不分片策略配置
  • 图中红色部分表示的是内部对象,由Sharding-JDBC内部使用,应用开发者无需关注。
    • ShardingJDBC通过ShardingRuleConfiguration和MasterSlaveRuleConfiguration生成真正供ShardingDataSource和MasterSlaveDataSource使用的规则对象。
    • ShardingDataSource和MasterSlaveDataSource实现了DataSource接口,是JDBC的完整实现方案。

# 初始化流程

  • 根据配置的信息生成Configuration对象
  • 通过Factory会将Configuration对象转化为Rule对象
  • 通过Factory会将Rule对象与DataSource对象封装
  • Sharding-JDBC使用DataSource进行分库分表和读写分离操作

# 使用过程

ShardingSphere-JDBC-快速入门 (opens new window)

# 引入maven依赖

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

注意: 请将${latest.release.version}更改为实际的版本号。

# 规则配置

ShardingSphere-JDBC 可以通过 Java,YAML,Spring 命名空间 和 Spring Boot Starter 这 4 种方式进行配置,开发者可根据场景选择适合的配置方式。 详情请参见用户手册 (opens new window)。

# 创建DataSource

通过 ShardingSphereDataSourceFactory 工厂和规则配置对象获取 ShardingSphereDataSource。 该对象实现自 JDBC 的标准 DataSource 接口,可用于原生 JDBC 开发,或使用 JPA, Hibernate, MyBatis 等 ORM 类库。

DataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(schemaName, modeConfig, dataSourceMap, ruleConfigs, props);

# 常见配置

这里记录YAML的配置方式,其他见请参见用户手册 (opens new window)。

# 模式

mode (?): # 不配置则默认内存模式
  type: # 运行模式类型。可选配置:Memory、Standalone、Cluster
  repository (?): # 久化仓库配置。Memory 类型无需持久化
  overwrite: # 是否使用本地配置覆盖持久化配置

# 数据源配置

dataSources: # 数据源配置,可配置多个 <data-source-name>
  <data-source-name>: # 数据源名称
    dataSourceClassName: # 数据源完整类名
    driverClassName: # 数据库驱动类名,以数据库连接池自身配置为准
    jdbcUrl: # 数据库 URL 连接,以数据库连接池自身配置为准
    username: # 数据库用户名,以数据库连接池自身配置为准
    password: # 数据库密码,以数据库连接池自身配置为准
    # ... 数据库连接池的其它属性
上次更新: 5/30/2023, 11:42:20 PM
数据分片剖析

数据分片剖析→

最近更新
01
2025
01-15
02
Elasticsearch面试题
07-17
03
Elasticsearch进阶
07-16
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式