使用【ShardingSphere】分库分表

本文介绍了ShardingSphere在刚果商城中的应用,包括垂直分库策略,水平分表(通过哈希取模分片算法)以及加密算法的配置。作者展示了如何在SpringBoot项目中集成ShardingSphere,并通过实例演示了如何使用它进行数据分片和加密处理。
摘要由CSDN通过智能技术生成

前言

ShardingSphere可以支撑分库分表,刚果商城采用了垂直分库(根据不同业务拆分数据库),因此此文章只演示水平分表。

垂直分库

不同业务拆分为不同的数据库(例如商城业务)

image-20231211153244893

水平分表

分表可以通过将大表拆分为多个小表,减少单表的数据量,从而提高查询性能。好处比较多…

分表命名格式最好为逻辑表_num这个格式,方便后续操作

image-20231211153404183

介绍完基本的概念,开始实践。

ShardingSphere官方文档

接下来重点关注分片算法加密算法

image-20231211153756733

核心依赖

我这里使用的是5.2.0版本

            <dependency>
                <groupId>org.apache.shardingsphere</groupId>
                <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
                <version>5.2.0</version>
            </dependency>

配置文件(核心)

spring:
  shardingsphere:
    datasource:
      # 为每个数据源进行配置,有几个配几个
      ds-0:
        driver-class-name: com.mysql.jdbc.Driver
        type: com.zaxxer.hikari.HikariDataSource
      #  配置数据源,可以配置多个
      names: ds-0
    props:
      # 打印sql日志方便观察
      sql-show: true
      max-connections-size-per-query: 10
    rules:
      encrypt:
        encryptors:
          # 自定义加密算法名称
          customer-user-encryptor:
            props:
              # AES 使用的 KEY
              aes-key-value: ADbisulBtxnnKFoW
            type: AES
        tables:
          # 指定表相应字段加密算法
          customer_user:
            # 加密字段
            columns:
              mail:
                cipher-column: mail
                encryptor-name: customer-user-encryptor
              phone:
                cipher-column: phone
                encryptor-name: customer-user-encryptor
          receive_address:
            columns:
              phone:
                cipher-column: phone
                encryptor-name: customer-user-encryptor
              detail_address:
                cipher-column: detail_address
                encryptor-name: customer-user-encryptor
      sharding:
        sharding-algorithms:
          # 自定义分片算法名称 哈希取模分片算法 对 16 取余
          sharding_by_mod:
            props:
              sharding-count: 16
            type: HASH_MOD # hash算法
        tables:
          # 不同表配置分片算法
          customer_user:
            # 指定真实表表名称 `$->{0..15}` 即 0-15
            actual-data-nodes: ds-0.customer_user_$->{0..15}
            table-strategy:
              standard:
                sharding-algorithm-name: sharding_by_mod
                sharding-column: id # 分片字段
          operation_log:
            actual-data-nodes: ds-0.operation_log_$->{0..15}
            table-strategy:
              standard:
                sharding-algorithm-name: sharding_by_mod
                sharding-column: customer_user_id
          receive_address:
            actual-data-nodes: ds-0.receive_address_$->{0..15}
            table-strategy:
              standard:
                sharding-algorithm-name: sharding_by_mod
                sharding-column: customer_user_id

分片算法

image-20231211160709395

加密算法

image-20231211160759699

代码实践

配置完之后,使用起来就很简单了,只需将实体类指定逻辑表名称,使用起来是无感知的。

image-20231211153100844

测试一下

调用【新增用户】接口。

入参:

image-20231211160300350

执行时,会发现有个逻辑SQL实际SQL,可以看到当前用户通过配置的Hash分片算法,被分配到了customer_user_5表中

image-20231211152125686

image-20231211152322414

image-20231211152408809

同时加密算法也起了作用,phone和mail字段都被加密。

ShardingSphere使用起来就是这么滴简单。

希望这篇文章对大家有帮助,有什么错误可以联系(私信)博主改正。

欢迎大家点赞 + 收藏 + 关注。关注小李不迷路~

详细分库分表内容可以看我这篇博客 MySQL与分布式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不进大厂不改名二号

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

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

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

打赏作者

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

抵扣说明:

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

余额充值