# Sharding Sphere 介绍


<!--more-->


## 1. sharding sphere 简介

ApacheShardingSphere是一款开源的分布式数据库中间件组成的生态圈。

它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar（规划中）这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能，可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

ShardingSphere项目状态如下：![img_66](https://img.zhaojq.top/20260727091852320.png "img_66")

ShardingSphere定位为关系型数据库中间件，旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力，而并非实现一个全新的关系型数据库。

![img_67](https://img.zhaojq.top/20260727091852518.png "img_67")

- Sharding-JDBC：被定位为轻量级Java框架，在Java的JDBC层提供的额外服务，以jar包形式使用。
- Sharding-Proxy：被定位为透明化的数据库代理端，提供封装了数据库二进制协议的服务端版本，用于完成对异构语言的支持。
- Sharding-Sidecar：被定位为**Kubernetes**或**Mesos**的云原生数据库代理，以DaemonSet的形式代理所有对数据库的访问。

![img_68](https://img.zhaojq.top/20260727091852740.png "img_68")

Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar三者区别如下：![img_69](https://img.zhaojq.top/20260727091852930.png "img_69")

> ShardingSphere安装包下载：https://shardingsphere.apache.org/document/current/cn/downloads/
>
> 使用Git下载工程：gitclonehttps://github.com/apache/incubator-shardingsphere.git 



## 2. sharding-JDBC

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

- 适用于任何基于Java的ORM框架，如：JPA,Hibernate,Mybatis,SpringJDBCTemplate或直接使用JDBC。
- 基于任何第三方的数据库连接池，如：DBCP,C3P0,BoneCP,Druid,HikariCP等。
- 支持任意实现JDBC规范的数据库。目前支持MySQL，Oracle，SQLServer和PostgreSQL。

![img_70](https://img.zhaojq.top/20260727091853142.png "img_70")

**主要功能:**

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

**Sharding-JDBC内部结构**:![img_71](https://img.zhaojq.top/20260727091853332.png "img_71")

- 图中黄色部分表示的是Sharding-JDBC的入口API，采用工厂方法的形式提供。目前有ShardingDataSourceFactory和MasterSlaveDataSourceFactory两个工厂类。
  - ShardingDataSourceFactory支持分库分表、读写分离操作
  - MasterSlaveDataSourceFactory支持读写分离操作
- 图中蓝色部分表示的是Sharding-JDBC的配置对象，提供灵活多变的配置方式。ShardingRuleConﬁguration是分库分表配置的核心和入口，它可以包含多个TableRuleConﬁguration和MasterSlaveRuleConﬁguration。
  - TableRuleConﬁguration封装的是表的分片配置信息，有5种配置形式对应不同的Conﬁguration类型。
  - MasterSlaveRuleConﬁguration封装的是读写分离配置信息。
- 图中红色部分表示的是内部对象，由Sharding-JDBC内部使用，应用开发者无需关注。Sharding-JDBC通过ShardingRuleConﬁguration和MasterSlaveRuleConﬁguration生成真正供ShardingDataSource和MasterSlaveDataSource使用的规则对象。ShardingDataSource和MasterSlaveDataSource实现了DataSource接口，是JDBC的完整实现方案。

**初始化流程:**

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

**使用过程:**

- 引入依赖

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

- 规则配置

  Sharding-JDBC可以通过Java，YAML，Spring命名空间和Spring Boot Starter四种方式配置，开发者可根据场景选择适合的配置方式。

- 创建DataSource

  通过ShardingDataSourceFactory工厂和规则配置对象获取ShardingDataSource，然后即可通过DataSource选择使用原生JDBC开发，或者使用JPA, MyBatis等ORM工具。

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

