对Sharding-JDBC的研究学习

Posted 懂一点架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对Sharding-JDBC的研究学习相关的知识,希望对你有一定的参考价值。

准备

中文文档:http://shardingjdbc.io/index_zh.html


引入Maven依赖

<dependency>

    <groupId>com.dangdang</groupId>

    <artifactId>sharding-jdbc-core</artifactId>

    <version>1.5.0</version>

</dependency>


为何选用1.5.0这个版本?答:据官方介绍,1.5.0版本是一次里程牌式的升级,对代码做了大量的重构工作,并提供了全新SQL解析引擎等。


截止目前,sharing-jdbc已经是2.x版本,需要1.x版本需要到https://github.com/shardingjdbc/sharding-jdbc/tree/${tag}查找。其中,example在https://github.com/shardingjdbc/sharding-jdbc/tree/${tag}/sharding-jdbc-example。


我们来看1.5.0版本的example:

https://github.com/shardingjdbc/sharding-jdbc/tree/1.5.0/sharding-jdbc-example。


架构设计

兼容扩展性

1,可适用于任何基于java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。

2,可基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid等。

3,理论上可支持任意实现JDBC规范的数据库。目前支持mysql,Oracle,SQLServer和PostgreSQL。


源码阅读(基于 Sharding-JDBC 1.5.0 版本)

芋道源码:http://www.iocoder.cn/categories/Sharding-JDBC/


总结

对比TSharding(开源):想了下,还是直接推荐使用sharding-jdbc吧!

对比Raptor(蘑菇街分库分表组件,未开源):

1,都适用于任何基于java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template等;

2,Raptor基于Druid数据库连接池实现;而sharding-jdbc可基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid等。

3,理论上都支持任意实现JDBC规范的数据库,如:MySQL,Oracle,SQLServer。


自研改进:

1,开源的sharding-jdbc将所有的配置都放在客户端,可考虑使用统一配置中心来管理。

2,sharding-jdbc的分片规则是数据库和数据表分别进行分片,考虑使用统一路由会简单些。

举例:假设有4个库,256个表,则00库中包含000~063表,01库中包含064~127表,02库中包含128~191表,03库中包含192~255表

① 选择查询数据库的规则 dbRule: db + userId / 64 % 4。

② 选择查询table的规则 tbRule: table + userId % 256。 

以上是关于对Sharding-JDBC的研究学习的主要内容,如果未能解决你的问题,请参考以下文章

MySQL多数据源笔记5-ShardingJDBC实战

学习sharding-jdbc 分库分表扩展框架

sharding-jdbc源码学习简介

分库分表常见概念解读+Sharding-JDBC实战

基于Sharding-JDBC的MySQL分库分表技术预研

sharding-jdbc学习