一、Sharding-JDBC概述
1.概念及主要功能
- 随着通信技术的革新,全新领域的应用层出不穷,数据存量随着应用的探索不断增加,数据的存储和计算模式无时无刻不面临着创新。面对交易、大数据、关联分析、物联网等场景越来越细分,单一数据库再也无法适用于所有的应用场景。于此同时,场景内部也愈加细化,相似场景使用不同数据库已成为常态。由此可见,数据库碎片化的趋势已经不可逆转。
- Sharding-JDBC是Apache ShardingSphere生态圈中一款开源的分布式数据库第三方组件。ShardingSphere由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这三款相互独立的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,适用于Java同构、异构语言、容器、云原生等各种多样化的应用场景。
Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供额外的服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架的使用。 - 适用于任何基于Java的ORM框架,如JPA、Hibernate、Mybatis、Spring JDBC Template或者直接使用JDBC。
基于任何第三方数据库连接池,如DBCP、C3P0、BoneCP、Druid、HikariCP等。
支持任意实现JDBC规范的数据库,目前支持MySQL、Oracle、SQLServer和PostgreSQL。
主要功能
- 数据分片
- 分库
- 分表
- 读写分离
- 分片策略
- 分布式主键
- 分布式事务
- 标准化的事务接口
- XA强一致性事务
- 柔性事务
- 数据库治理
- 配置动态化
- 编排和治理
- 数据脱敏
- 可视化链路追踪
2.内部结构
-
这部分表示的是Sharding-JDBC的入口API,采用工厂方法的形式提供。
ShardingDataSourceFactory支持分库分表、读写分离操作。
MasterSlaveDataSoureceFactory支持读写分离操作。 -
这部分表示的是Sharding-JDBC的配置对象,提供灵活多变的配置方式。
TableRuleConfiguration,它包含分片配置规则。
MasterSlaveRuleConfiguration,它包含的是读写分离的配置规则
ShardingRuleConfiguration,主入口,它包含多个TableRuleConfiguration,也可以包含多个MasterSlaveRuleConfiguration -
这部分表示的是内部对象,由Sharding-JDBC内部使用,应用开发者无需关注。
Sharding-JDBC通过ShardingRuleConfiguration和MasterSlaveRuleConfiguration生成真正的规则对象,最终生成要使用的DataSource。 -
Sharding-JDBC初始化流程,根据配置信息生成configuration对象,通过Factory将configuration对象转化为Rule对象,通过Factory将Rule对象与DataSource对象进行封装,使用Sharding-JDBC进行分库分表操作。
Sharding-JDBC的使用
-
引入maven依赖
<!-- https://mvnrepository.com/artifact/org.apache.shardingsphere/sharding-jdbc-core --> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>4.1.1</version> </dependency>
-
规则配置
Sharding-JDBC可以通过Java、YAML、Spring命名空间和Spring Boot Starter四种方式配置,开发者根据场景选择合适的配置方式。 -
创建DataSource
通过ShardingDataSourceFactory工厂和规则配置对象获取ShardingDataSource,然后即可通过DataSource选择使用原生JDBC开发,或者使用JPA,Mybatis等ORM工具。
3.分片核心概念
-
真实表:数据库中真实存在的物理表。例如b_order0、b_order1。
-
逻辑表:在分片之后,同一类表结构的名称(总称)。例如b_order。
-
数据节点:在分片之后,由数据源和数据表组成。例如ds0.b_order1。<