ShardingSphere简介
- Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。
- ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。
SpringBoot配置
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
SpringBoot工程目录结构
目录结构
application.properties
server.port=8082
spring.profiles.active=sharding-tables
#spring.profiles.active=master-slave
mybatis.mapper-locations=classpath:mapping/*.xml
mybatis.type-aliases-package=com.lx.model
#pagehelper分页插件
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
application-sharding-tables.properties
sharding.jdbc.datasource.names=ds
sharding.jdbc.datasource.ds.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds.url=jdbc:mysql://127.0.0.1:3306/ds0
sharding.jdbc.datasource.ds.username=root
sharding.jdbc.datasource.ds.password=root
sharding.jdbc.config.sharding.tables.note.actual-data-nodes=ds.note$->{0..1}
sharding.jdbc.config.sharding.tables.note.table-strategy.inline.sharding-column=id
sharding.jdbc.config.sharding.tables.note.table-strategy.inline.algorithm-expression=note$->{id % 2}
sharding.jdbc.config.sharding.tables.note.key-generator-column-name=id
分库分表中间件对比
- sharing-jdbc是客户端产品,对于Java来说只要引入jar包就可以使用了;Mycat是服务端产品,需要单独的部署服务;
- sharing-jdbc和Mycat社区都比较活跃;
- sharing-jdbc只是针对java语言;Mycat没有语言的限制;
- sharing-jdbc支持二维路由,Mycat不支持二维路由,仅支持单库多表或多库单表;
- sharing-jdbc目前支持XA分布式事务,4.x版本预计支持柔性事务;Mycat支持XA分布式事务;
- sharing-jdbc和Mycat都是开源产品;
- Mycat分片规则更丰富一些;
- sharing-jdbc路由至多数据节点以及非MySQL,不支持冗余括号、CASE WHEN、HAVING、UNION (ALL),有限支持子查询;
- Mycat除了分片规则相同、ER 分片、全局表、以及SharedJoin,其他表之间的Join 问题目前还没有很好的解决,需要自己编写Catlet 来处理;
附录
- ShardingSphere首页
- ShardingSphere3.x版本文档
- ShardingSphere4.x版本文档
- ShardingSphere例子
- Mycat权威指南
- Mycat
网友评论