现在国内对于数据库分库分表的开源方案,主要是mycat和sharding-sphere,本文主要是自己对于sharding-sphere使用的一些记录。
sharding-sphere简单介绍 Sharding-JDBC 采用在 JDBC 层扩展分库分表,支持读写分离,是一个以 jar 形式提供服务的轻量级组件,其核心思路是小而美地完成最核心的事情,基于 JDBC 层进行分片的好处是轻量、简单、兼容性好以及无需额外的运维工作。缺点是无法跨语言,目前仅支持 Java。
Sharding-Sphere的3个产品的数据分片主要流程是一致的。核心思想是:SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并的流程组成。(详情查看官网文档)
分库分表 开发环境:  项目搭建使用的是 Spring Boot + Sharding-Sphere + MyBatis。
注意:Sharding-Sphere 对于Spring-Boot 好像还不支持2.x版本以上,请选择1.x版本,详细源码,请查看相应的demo。
分别创建2个数据库,然后创建相应的表,创建数据库DDL如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE  TABLE  `t_order` (  `order_id` bigint (20 ) NOT  NULL  AUTO_INCREMENT,   `status` varchar (255 ) DEFAULT  NULL ,   `user_id` int (11 ) DEFAULT  NULL ,   PRIMARY  KEY  (`order_id`) USING  BTREE ) ENGINE= InnoDB AUTO_INCREMENT= 344805296301932545  DEFAULT  CHARSET= utf8; CREATE  TABLE  `t_order_item` (  `order_item_id` bigint (20 ) NOT  NULL ,   `order_id` bigint (20 ) DEFAULT  NULL ,   `status` varchar (255 ) DEFAULT  NULL ,   `user_id` int (11 ) DEFAULT  NULL ,   PRIMARY  KEY  (`order_item_id`) ) ENGINE= InnoDB DEFAULT  CHARSET= utf8; 
核心Maven依赖(版本:4.0.0-RC1):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!-- for  spring boot --> <dependency>     <groupId>org.apache.shardingsphere</groupId>     <artifactId>sharding-jdbc-spring-boot-starter</artifactId>     <version>${sharding-sphere.version} </version> </dependency> <!-- for  spring namespace --> <dependency>     <groupId>org.apache.shardingsphere</groupId>     <artifactId>sharding-jdbc-spring-namespace</artifactId>     <version>${sharding-sphere.version} </version> </dependency> 
集成sharding-sphere的核心配置文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 spring.shardingsphere.datasource.names=ds0,ds1 spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver spring.shardingsphere.datasource.ds0.jdbcUrl=jdbc:mysql://localhost:3306/ds0?serverTimezone=UTC&useSSL=false &useUnicode=true &characterEncoding=UTF-8 spring.shardingsphere.datasource.ds0.username=root spring.shardingsphere.datasource.ds0.password= spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver spring.shardingsphere.datasource.ds1.jdbcUrl=jdbc:mysql://localhost:3306/ds1?serverTimezone=UTC&useSSL=false &useUnicode=true &characterEncoding=UTF-8 spring.shardingsphere.datasource.ds1.username=root spring.shardingsphere.datasource.ds1.password= spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=user_id spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2} spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order spring.shardingsphere.sharding.tables.t_order.key-generator.column=order_id spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE spring.shardingsphere.sharding.tables.t_order_item.actual-data-nodes=ds$->{0..1}.t_order_item spring.shardingsphere.sharding.tables.t_order_item.key-generator.column=order_item_id spring.shardingsphere.sharding.tables.t_order_item.key-generator.type=SNOWFLAKE 
下面就是和平时一样搭建MyBatis部分了,这部分就不详细介绍了。
本人写了插入和查询测试样例,实现了数据库的分库分表功能。
Reference