可以通过Spring Boot+MyBatis+Sharding-JDBC实现分库分表。
Sharding-JDBCSharding-JDBC:定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
适用于任何基于Java的ORM框架,如JPA、Hibernate、MyBatis、Spring JDBC Template或直接使用JDBC.基于任何第三方的数据库连接池,如DBCP、C3P0、BoneCP、Druid、HikariCP等。支持任意实现JDBC规范的数据库,如MySQL、Oracle、SQLSever和PostgreSQL以及任何遵循 SQL92 标准的数据库。sharding-jdbc架构ShardingSphere-JDBC 采用无中心化架构,适用于 Java 开发的高性能的轻量级 OLTP 应用。
功能数据分片:分库和分表,读写分离,分布式主键;分布式事务;XA强一致事务,柔性事务;数据库治理;配置动态化,熔断和禁用,调用链路追踪;分库分表方式分库分表方式分别为垂直分表、垂直分库、水平分表和水平分库。
垂直分表:把一个宽表的字段按访问频次、是否是大字段的原则拆分为多个表,这样可以使业务清晰,还能提升部分性能。拆分后,尽量从业务角度避免联查,否则性能方面将得不偿失。垂直分库:把多个表按照业务耦合松紧归类,分别存放不同的库,这些库可以分布不同服务器,从而使访问压力被多服务器负载,大大提升性能,同时能提高整体架构的业务清晰度,不同的业务库可根据自身情况定制优化方案。但是它需要解决跨库带来的所有复杂问题。水平分库:把一个表的数据(按数据行)分到多个不同的库,每个库只有这个表的部分数据,这些库可以分布在不同服务器,从而使访问压力被多个服务器负载,大大提升性能。它不仅需要解决跨库带来的所有复杂度问题,还要解决数据路由的问题。水平分表:把一个表的数据(按数据行)分到多个同一个数据库的多张表中,每个表只有这个表的部分数据,这样能小幅提升性能,它仅仅作为水平分库的一个补充优化。一般来说,在系统设计阶段就应该根据业务耦合松紧来确定垂直分库和垂直分表方案,在数据量、访问压力不是特别大的情况,首先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑水平分库和水平分表方案。
引入 maven 依赖
注意: 请将${latest.release.version}更改为实际的版本号。
规则配置ShardingSphere-JDBC 可以通过 Java,YAML,Spring 命名空间和 Spring Boot Starter 这 4 种方式进行配置,开发者可根据场景选择适合的配置方式。
创建数据源通过 ShardingSphereDataSourceFactory 工厂和规则配置对象获取 ShardingSphereDataSource。 该对象实现自 JDBC 的标准 DataSource 接口,可用于原生 JDBC 开发,或使用 JPA, MyBatis 等 ORM 类库。
官方中文文档:/
如果解决了你的疑惑,请点点关注,谢谢支持。