分库分表首选ShardingSphere

Apache ShardingSphere是一套开源的分布式数据库中间件,提供标准化的数据分片、分布式事务和数据库治理功能。

Apache ShardingSphere于2020年4月15日成为Apache顶级项目,由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)3款相互独立组件构成,能够混合部署搭配使用。

适用于Java、异构语言、云原生等多样化应用场景。

由于关系型数据库占有巨大的市场,也是各个公司核心业务的基石,未来也难以撼动,所以,ShardingSphere目前阶段更关注在原有基础上的增量,定位为关系型数据库中间件,为分布式应用场景下的关系型数据库提供计算和存储能力,而并非实现一个全新的关系型数据库。

特性

数据分片

分库 & 分表

读写分离

分片策略定制化

无中心化分布式主键

分布式事务

标准化事务接口

XA强一致事务

柔性事务

数据库治理

配置动态化

编排 & 治理

数据脱敏

可视化链路追踪支持

数据迁移 & 弹性伸缩

与Spring Boot集成

与主流框架Spring Boot的集成配置官方有着详实的说明文档与示例,大致感受一下:

Data Sharding

spring.shardingsphere.datasource.names=ds0,ds1

spring.shardingsphere.datasource.ds0.type=org.apache.commons.dbcp.BasicDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=

spring.shardingsphere.datasource.ds1.type=org.apache.commons.dbcp.BasicDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=

Read-Write Split

spring.shardingsphere.datasource.names=master,slave0,slave1

spring.shardingsphere.datasource.master.type=org.apache.commons.dbcp.BasicDataSource
spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.master.url=jdbc:mysql://localhost:3306/master
spring.shardingsphere.datasource.master.username=root
spring.shardingsphere.datasource.master.password=

spring.shardingsphere.datasource.slave0.type=org.apache.commons.dbcp.BasicDataSource
spring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.slave0.url=jdbc:mysql://localhost:3306/slave0
spring.shardingsphere.datasource.slave0.username=root
spring.shardingsphere.datasource.slave0.password=

spring.shardingsphere.datasource.slave1.type=org.apache.commons.dbcp.BasicDataSource
spring.shardingsphere.datasource.slave1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.slave1.url=jdbc:mysql://localhost:3306/slave1
spring.shardingsphere.datasource.slave1.username=root
spring.shardingsphere.datasource.slave1.password=

spring.shardingsphere.masterslave.load-balance-algorithm-type=round_robin
spring.shardingsphere.masterslave.name=ms
spring.shardingsphere.masterslave.master-data-source-name=master
spring.shardingsphere.masterslave.slave-data-source-names=slave0,slave1

spring.shardingsphere.props.sql.show=true

不支持的JDBC特性

DataSource接口

不支持超时相关操作。

Connection接口

不支持存储过程、函数和游标操作。

不支持native SQL。

不支持savepoint相关操作。

不支持Schema / Catalog 操作。

不支持自定义映射。

Statement和PreparedStatement接口

不支持返回多个结果集的语句(存储过程,多条非SELECT数据)。

不支持国际字符的操作

ResultSet接口

不支持获取结果集指针位置。

不支持通过none-next方法更改结果指针的位置。

不支持修改结果集的内容。

不支持获取国际字符。

不支持获取数组。

JDBC 4.1

不支持JDBC 4.1接口新功能

关于不受支持的方法,参考以下包:

org.apache.shardingsphere.shardingjdbc.jdbc.unsupported