目录
- 前言
- 1. sharding-jdbc处理流程
- 2.sharding-jdbc的扩展点
前言
sharding-jdbc主要功能是分片,我们实现不同分片算法来进行分库分表,另外一个扩展点就是主键生成, 本文主要记录下sharding-jdbc执行流程和分片路由具体实现以及主键生成,在工作中方便排查问题。
主要记录三个问题:
1.sharding-jdbc执行流程
2.自定义分片算法是如何被sharding-jdbc框架调用的
3.主键是在何处何时生成
4.扩展机制spi
1. sharding-jdbc处理流程
操作数据库套路是:数据源获取数据库连接,数据库连接生成Statement,然后执行Statement,获取sql执行结果。
那么对于sharding来说
入口获取数据库连接就是ShardingDataSource.getConnection()
接着生成PreparedStatement:ShardingConnection.prepareStatement(String)
,生成ShardingPreparedStatement
对于增删改查就是ShardingPreparedStatement的execute()、executeUpdate()、executeQuery()、、
以execute()
为例:
//org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.execute()
@Override
public boolean execute() throws SQLException {
try {
clearPrevious();//本地缓存清空
shard();//路由,路由结果保存到this.routeResult。核心功能
initPreparedStatementExecutor();//初始化执行器
return preparedStatementExecutor.execute();//真实sql执行jdbc操作
} finally {
clearBatch();
}
}
分析核心路由功能shard()
//org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.shard()
private void shard() {
routeResult = shardingEngine.shard(sql, getParameters());
}
//org.apache.shardingsphere.core.BaseShardingEngine.shard(String, List