Sharding JDBC的完整YAML配置示例

spring:
  shardingsphere:
    datasource:
      names: ds_0, ds_1
      ds_0:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/db_0
        username: user
        password: password
      ds_1:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/db_1
        username: user
        password: password
    sharding:
      default-data-source-name: ds_0
      tables:
        user:
          actual-data-nodes: ds_${0..1}.user_${0..3}
          table-strategy:
            standard:
              sharding-column: id
              precise-algorithm-class-name: com.example.ModuloShardingAlgorithm
          key-generator:
            column: id
            type: SNOWFLAKE
            worker-id: 1
            max-tolerate-timeout-milliseconds: 300
      binding-tables: user
      default-database-strategy:
        inline:
          sharding-column: id
          algorithm-expression: ds_${id % 2}
      default-table-strategy:
        inline:
          sharding-column: id
          algorithm-expression: user_${id % 4}

上述配置中,我们定义了两个数据源(ds_0和ds_1),并配置了它们的连接信息,包括驱动类名、URL、用户名、密码、连接超时时间、空闲超时时间、最大生命周期、最大连接池大小、最小空闲连接数和连接测试SQL。
接着,我们定义了一个表(user)的分片规则。该表的实际数据节点是由ds_0和ds_1组成的,使用取模算法(ModuloShardingAlgorithm)进行分片,分片键为id。同时,我们配置了Snowflake算法作为key-generator来生成唯一ID。
在default-database-strategy和default-table-strategy中,我们分别配置了默认的数据库策略和表策略。默认数据库策略使用了inline算法,根据id的值将数据路由到不同的数据源;默认表策略为none,表示不进行表分片。
最后,我们将user表绑定到了binding-tables中。
通过以上的YAML配置,Sharding JDBC会根据配置的分片规则将数据进行分片存储和查询,并根据配置的连接池参数进行连接管理。在使用Spring Boot时,只需将以上配置放入application.yml或application.properties文件中,Sharding JDBC会自动加载并创建数据源。

在上述示例中,我们使用的是基于取模算法(ModuloShardingAlgorithm)的分片策略,其中分片键为id。假设我们有8条数据,id分别为0到7。
根据配置的分片规则,数据会被分到不同的数据节点(ds_0和ds_1)和不同的表(user_0, user_1, user_2, user_3)中。具体分布如下:

数据id为0、1的数据会被路由到ds_0的user_0表中;

数据id为2、3的数据会被路由到ds_0的user_1表中;

数据id为4、5的数据会被路由到ds_1的user_2表中;

数据id为6、7的数据会被路由到ds_1的user_3表中。
通过将数据分散到多个表和数据库中,可以有效地提高数据库的负载能力和扩展性,同时避免单一数据库的性能瓶颈问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_树先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值