概述

GitHub release GitHub stars GitHub forks GitHub watchers

Sharding-JDBC是一个开源的分布式数据库中间件解决方案。它在Java的JDBC层以对业务应用零侵入的方式额外提供数据分片,读写分离,柔性事务和分布式治理能力。并在其基础上提供封装了MySQL协议的服务端版本,用于完成对异构语言的支持。

基于JDBC的客户端版本定位为轻量级Java框架,使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

封装了MySQL协议的服务端版本定位为透明化的MySQL代理端,可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench等)操作数据,对DBA更加友好。

License

Maven StatusGitHub release

Build StatusCoverage StatusGitterOpenTracing-1.0 BadgeSkywalking Tracing

功能列表

1. 数据分片

  • 支持分库 + 分表
  • 支持聚合,分组,排序,分页,关联查询等复杂查询语句
  • 支持常见的DML,DDL,TCL以及数据库管理语句
  • 支持=,BETWEEN,IN的分片操作符
  • 自定义的灵活分片策略,支持多分片键共用,支持inline表达式
  • 基于Hint的强制路由
  • 支持分布式主键

2. 读写分离

  • 支持一主多从的读写分离
  • 支持同一线程内的数据一致性
  • 支持分库分表与读写分离共同使用
  • 支持基于Hint的强制主库路由

3. 柔性事务

  • 最大努力送达型事务
  • TCC型事务(TBD)

4. 分布式治理

  • 支持配置中心,可动态修改配置
  • 支持客户端熔断和失效转移
  • 支持Open Tracing协议

部署架构

Sharding-JDBC-Driver

通过客户端分片的方式由应用程序直连数据库,减少二次转发成本,性能最高,适合线上程序使用。

  • 可适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 可基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid等。
  • 可支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

Sharding-JDBC-Driver Architecture

Sharding-JDBC-Server

通过代理服务器连接数据库(目前仅支持MySQL),适合其他开发语言或MySQL客户端操作数据。

  • 向应用程序完全透明,可直接当做MySQL使用。
  • 可适用于任何兼容MySQL协议的客户端。

Sharding-JDBC-Server Architecture

Sharding-JDBC-Sidecar(TBD)

通过sidecar分片的方式,由IPC代替RPC,自动代理SQL分片,适合与Kubernetes或Mesos配合使用。

Sharding-JDBC-Sidecar Architecture

快速入门

Sharding-JDBC-Driver

引入maven依赖

  1. <!-- 引入sharding-jdbc核心模块 -->
  2. <dependency>
  3. <groupId>io.shardingjdbc</groupId>
  4. <artifactId>sharding-jdbc-core</artifactId>
  5. <version>${latest.release.version}</version>
  6. </dependency>

规则配置

Sharding-JDBC可以通过JavaYAMLSpring命名空间Spring Boot Starter四种方式配置,开发者可根据场景选择适合的配置方式。

创建DataSource

通过ShardingDataSourceFactory工厂和规则配置对象获取ShardingDataSource,ShardingDataSource实现自JDBC的标准接口DataSource。然后即可通过DataSource选择使用原生JDBC开发,或者使用JPA, MyBatis等ORM工具。

  1. DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig);

Sharding-JDBC-Server

规则配置

编辑${sharding-jdbc-server}\conf\sharding-config.yaml。配置规则同Sharding-JDBC-Driver的YAML格式。

启动服务

  1. ${sharding-jdbc-server}\bin\start.sh ${port}