简介
Sharding-JDBC 是 ShardingSphere 的第一个产品,也是 ShardingSphere 的前身。
它定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额定服务。它应用客户端直连数据库,以 jar 包模式提供服务,无需额定部署和依赖,可了解为增强版的 JDBC 驱动,齐全兼容 JDBC 和各种 ORM 框架。
- 实用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或间接应用 JDBC。
- 反对任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。
- 反对任意实现 JDBC 标准的数据库。目前反对 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 规范的数据库。
比照
Sharding-JDBC | Sharding-Proxy | Sharding-Sidecar | |
---|---|---|---|
数据库 | 任意 |
MySQL/PostgreSQL | MySQL/PostgreSQL |
连贯耗费数 | 高 |
低 | 高 |
异构语言 | 仅 Java |
任意 | 任意 |
性能 | 损耗低 |
损耗略高 | 损耗低 |
无中心化 | 是 |
否 | 是 |
动态入口 | 无 |
有 | 无 |
Sharding-JDBC 的劣势在于对 Java 利用的友好度。
内部结构
黄色局部
图中黄色局部示意的是 Sharding-JDBC 的入口 API,采纳工厂办法的模式提供。
目前有 ShardingDataSourceFactory 和 MasterSlaveDataSourceFactory 两个工厂类。ShardingDataSourceFactory 用于创立分库分表或分库分表 + 读写拆散的 JDBC 驱动,MasterSlaveDataSourceFactory 用于创立独立应用读写拆散的 JDBC 驱动。
蓝色局部
图中蓝色局部示意的是 Sharding-JDBC 的配置对象,提供灵便多变的配置形式。
ShardingRuleConfiguration 是分库分表配置的外围和入口,它能够蕴含多个 TableRuleConfiguration 和 MasterSlaveRuleConfiguration。每一组雷同规定分片的表配置一个 TableRuleConfiguration。如果须要分库分表和读写拆散独特应用,每一个读写拆散的逻辑库配置一个 MasterSlaveRuleConfiguration。
每个 TableRuleConfiguration 对应一个 ShardingStrategyConfiguration,它有 5 中实现类可供选择。
仅读写拆散应用 MasterSlaveRuleConfiguration 即可。
红色局部
图中红色局部示意的是外部对象,由 Sharding-JDBC 外部应用,利用开发者无需关注。Sharding-JDBC 通过 ShardingRuleConfiguration 和 MasterSlaveRuleConfiguration 生成真正供 ShardingDataSource 和 MasterSlaveDataSource 应用的规定对象。ShardingDataSource 和 MasterSlaveDataSource 实现了 DataSource 接口,是 JDBC 的残缺实现计划。
初始化流程
- 配置 Configuration 对象。
- 通过 Factory 对象将 Configuration 对象转化为 Rule 对象。
- 通过 Factory 对象将 Rule 对象与 DataSource 对象拆卸。
- Sharding-JDBC 应用 DataSource 对象进行分库。
应用约定
在 org.apache.shardingsphere.api
和org.apache.shardingsphere.shardingjdbc.api
包中的类是面向用户的 API,每次批改都会在 release notes 中明确申明。
其余包中的类属于外部实现,可能随时进行调整,请勿间接应用
。