简介
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中明确申明。
其余包中的类属于外部实现,可能随时进行调整,请勿间接应用
。