简介
趁着seata的热乎气,继续谈谈分布式数据的问题,今天谈谈对shardingsphere-jdbc的初识。
分析
先看看对shardingsphere-jdbc的整体认识,看看来自官网的一张图。

第一想法是什么?图画的不错,不不,好像是拿着Sharding-JDBC取代了jdbc,通过Sharding-JDBC来访问数据库,靠猜不行看看代码怎么搞的,这种入门程序就不多说了,直接到官网截一段使用的代码片段。

呀哈,确定过眼神好像见过这个图,没毛病老铁,seata也是到DataSource这里来搞事情。稍等片刻,来个你画我猜,是不是这个样子的,结合代码配置来看,配置了多个数据源,并配置了对应的规则,这么一来岂不就是,对要执行的sql进行解析,看看应该放到哪个数据源去执行,这不就达到目的了吗。比如有根据id奇偶来路由到不同库来执行,id是奇数就符合了数据源1的规则,那就定位了数据源1,那就到数据源1拿连接执行sql,perfect,还是那句话靠猜不踏实啊,看看代码去。

这里看到ShardingDataSourceFactory搞了一个ShardingDataSource,看看怎么取连接。

这里看到ShardingDataSource搞了一个ShardingConnection,再去搞一个Statement。

这里看到ShardingConnection搞了一个ShardingPreParedStatement,最后看一张整体关系图。

接下来就看看sql的执行吧。

简单看看这里的逻辑,prepare、executeQuery。

既然是为了得到ExecutionContext,先瞧瞧它这里的SqlStatementContext和ExecutionUnits。

这里意图就很清晰了,有个这个组件和ShardingPreParedStatement执行一个sql的全部条件就都具备了,statement、sql、parameter,那就看看这个组件怎么初始化的,看上面代码注意到都与RouteContext有关。那就看看RouteContext。

这里也很清楚的说明了路由意图,路由器通过sql和路由规则得到路由结果,将路由结果保存到路由上下文,注意路由节点和路由单元的结构。
到这prepare就很清楚了,就是准备好执行上下文,继续看看executeQuery,其实这个也就没什么了,有了执行上下文,那就真正去执行jdbc就行了。
总结
综上来看Sharding-JDBC就是在sql执行前根据配置的规则得到真正的sql后,然后jdbc执行sql。
本文介绍了ShardingSphere-JDBC的基本概念和工作原理,通过官方示例代码展示了其如何根据配置的路由规则,在sql执行前确定实际的数据源,实现数据分片。Sharding-JDBC通过解析SQL并应用路由规则,动态生成执行上下文,最终由jdbc执行SQL,达到分布式数据操作的目的。
2129

被折叠的 条评论
为什么被折叠?



