【Sharding-JDBC】一文轻松了解Sharding-JDBC

前言

Sharding-JDBC 作为当前主流的分库分表组件, 虽然已经有很多现成代码可以copy,但是我们还是要了解一下为啥要这么配置,以及具体运行大致流程,废话不多说,学前先介绍一下使用场景。

  • 数据库水平扩展:当单个数据库无法满足高并发和大数据量的需求时,可以通过分库分表来水平扩展数据库。Sharding-JDBC可以帮助将数据分散存储在多个数据库中,提高数据库的扩展性和性能
  • 高可用性和容灾:通过将数据复制到不同的数据库节点,可以提供高可用性和容灾能力。当一个节点出现故障时,可以切换到备用节点上继续提供服务
  • 多租户系统:在多租户系统中,不同的租户数据需要被隔离存储。通过使用Sharding-JDBC,可以将不同租户的数据分散存储在不同的数据库中,保证数据的安全性和隔离性。
  • 数据分析和报表系统:在数据分析和报表系统中,大量的数据需要进行查询和统计分析。通过将数据分片存储在多个数据库中,可以提高查询和分析的性能。
  • 业务隔离和解耦:在大型系统中,不同的业务模块可能需要独立的数据库。通过使用Sharding-JDBC,可以将不同业务模块的数据分散存储在不同的数据库中,实现业务的隔离和解耦。

需要注意的是,使用Sharding-JDBC进行分库分表需要仔细规划和设计,包括数据切分策略、数据迁移、数据一致性等方面的考虑。在选择和使用Sharding-JDBC时,需要根据具体业务需求和场景进行评估和决策。

1. JDBC 到 Sharding-JDBC

相信很多初学java的同学对这个并不陌生,我们知道 JDBC 是一种 Java 语言访问关系型数据库的规范,其设计初衷就是要提供一套用于各种数据库的统一标准,不同厂家共同遵守这套标准,并提供各自的实现方案供应用程序调用。

  1. 创建DataSource -》 2.获取Connection -》3. 构建Statement -》 4. 执行SQL-》5.处理ResultSte结果集

DataSource 接口核心


public interface DataSource  extends CommonDataSource, Wrapper {
   
 
  /**
   * <p>Attempts to establish a connection with the data source that
   * this {@code DataSource} object represents.
   * @return  a connection to the data source
   */
  Connection getConnection() throws SQLException;
 
  /**
   * <p>Attempts to establish a connection with the data source that
   * this {@code DataSource} object represents.
   * @param username the database user on whose behalf the connection is
   *  being made
   * @param password the user's password
   */
  Connection getConnection
在面对日益增长的数据量时,数据库垂直拆分成为了提高性能和扩展性的重要手段。Sharding-JDBC作为一个轻量级的JDBC层解决方案,可以帮助我们在不改变现有数据库架构的前提下,实现数据库的垂直拆分。为了帮助你更好地理解和操作这一过程,我推荐你查看《Spring BootSharding-JDBC+Mybatis-Plus整合实现分库分表》一文,它详细地介绍了如何通过Sharding-JDBC实现数据库的水平和垂直拆分。 参考资源链接:[Spring BootSharding-JDBC+Mybatis-Plus整合实现分库分表](https://wenku.youkuaiyun.com/doc/7o9f28mdqt?spm=1055.2569.3001.10343) 首先,你需要在Spring Boot项目的POM.xml文件中引入Sharding-JDBC和Mybatis-Plus的依赖,如上所示。之后,在application.yml或application.properties中进行配置,指定数据源和分片策略。例如,垂直拆分通常涉及创建多个物理数据库,并将不同业务的表分散到不同的数据库中。你可以在Sharding-JDBC配置文件中定义每个数据源以及如何根据业务逻辑将查询路由到正确的数据源上。 在Spring Boot项目中,你可以使用@Configuration来定义数据源和Sharding-JDBC的配置。例如: ```yaml spring: shardingsphere: datasource: names: ds0,ds1 ds0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/ds0 username: root password: 123456 ds1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/ds1 username: root password: 123456 sharding: tables: user: actual-data-nodes: ds0.user,ds1.user table-strategy: inline: sharding-column: id algorithm-expression: ds$->{id % 2} ``` 在这个配置示例中,我们定义了两个数据源ds0和ds1,并且创建了一个名为user的表,根据id列的值进行取模分片。这意味着id为奇数的记录会被存放到ds0的user表中,而id为偶数的记录会被存放到ds1的user表中。 配置完成后,你需要在项目中创建对应的实体类和Mapper接口,并使用Mybatis-Plus提供的操作API来进行数据操作。Sharding-JDBC会根据配置的规则自动将操作路由到正确的数据源和表上。 最终,通过编写单元测试来验证配置是否正确执行,确保数据能够正确地根据分片策略分散存储。通过这种方式,你可以有效地解决因单库单表带来的性能瓶颈问题,提高系统的处理能力和扩展性。 为了深入理解如何在Spring Boot项目中使用Sharding-JDBC进行数据库的垂直拆分,建议继续查阅《Spring BootSharding-JDBC+Mybatis-Plus整合实现分库分表》一文,它不仅详细介绍了上述内容,还涵盖了更多高级功能和实际应用场景,帮助你全面掌握这一技术的精髓。 参考资源链接:[Spring BootSharding-JDBC+Mybatis-Plus整合实现分库分表](https://wenku.youkuaiyun.com/doc/7o9f28mdqt?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值