使用【ShardingSphere】分库分表

前言

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

垂直分库

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

使用【ShardingSphere】分库分表_第1张图片

水平分表

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

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

使用【ShardingSphere】分库分表_第2张图片

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

ShardingSphere官方文档

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

使用【ShardingSphere】分库分表_第3张图片

核心依赖

我这里使用的是5.2.0版本

            <dependency>
                <groupId>org.apache.shardingspheregroupId>
                <artifactId>shardingsphere-jdbc-core-spring-boot-starterartifactId>
                <version>5.2.0version>
            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

分片算法

使用【ShardingSphere】分库分表_第4张图片

加密算法

使用【ShardingSphere】分库分表_第5张图片

代码实践

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

使用【ShardingSphere】分库分表_第6张图片

测试一下

调用【新增用户】接口。

入参:

使用【ShardingSphere】分库分表_第7张图片

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

使用【ShardingSphere】分库分表_第8张图片

image-20231211152322414

image-20231211152408809

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

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

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

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

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

你可能感兴趣的:(cloud分布式,碎片化小知识点,java,分布式)