sharding-sphere 分表实战

sharding-sphere 分表实战

技术栈

Springboot + sharding-sphere + mybatis-plus

安装教程
  1. 初始化数据库脚本(创建三张表 t_user_info_01、t_user_info_02、t_user_info_03)
CREATE TABLE `t_user_info_01` (
`id` bigint NOT NULL COMMENT '主键',
`name` varchar(255) DEFAULT NULL COMMENT '名称',
`age` int DEFAULT NULL COMMENT '年龄',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

CREATE TABLE `t_user_info_02` (
`id` bigint NOT NULL COMMENT '主键',
`name` varchar(255) DEFAULT NULL COMMENT '名称',
`age` int DEFAULT NULL COMMENT '年龄',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

CREATE TABLE `t_user_info_03` (
`id` bigint NOT NULL COMMENT '主键',
`name` varchar(255) DEFAULT NULL COMMENT '名称',
`age` int DEFAULT NULL COMMENT '年龄',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  1. 配置分表策略
spring:
  sharding-sphere:
    datasource:
      names: ds0
      ds0:
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.zaxxer.hikari.HikariDataSource
        jdbc-url: jdbc:mysql://localhost:3306/sharding-sphere?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
        username: root
        password: 123456
    sharding:
      tables:
      # 虚拟表名
        t_user_info:
          # 真实表名
          actual-data-nodes: ds0.t_user_info_0$->{1..3}
          table-strategy:
            inline:
            # 根据年龄字段分表
              sharding-column: age
              algorithm-expression: t_user_info_0$->{age % 3 + 1}
使用说明
  1. 插入数据
    @PostMapping("/insert")
    public void insert(@RequestBody TUserInfo userInfo) {
        List<TUserInfo> tUserInfos = new ArrayList<>();
        for (int i = 0; i < 60; i++) {
            TUserInfo tUserInfo = BeanUtil.copyProperties(userInfo, TUserInfo.class);
            tUserInfo.setAge(i);
            tUserInfo.setCreateTime(LocalDateTime.now());
            tUserInfos.add(tUserInfo);
        }
        userInfoService.saveBatch(tUserInfos);
    }
  1. 查看插入数据分布
  • t_user_info_01

在这里插入图片描述

  • t_user_info_02

在这里插入图片描述

  • t_user_info_03
    在这里插入图片描述
  1. 查询数据
@GetMapping("/list/page")
    public IPage<TUserInfo> queryPage() {
        IPage<TUserInfo> page = new Page<>();
        page.setSize(10);
        page.setCurrent(3);
        return userInfoService.selectPageVo(page);
    }
  1. JDK17 问题解决

jdk17插入数据可能会报以下错误

Unable to make field private static final long java.lang.Number.serialVersionUID accessible: module java.base does not "opens java.lang" to unnamed module @4ac3c60d

在Java 9及以后的版本中,引入了模块化系统,它允许将代码和资源划分为多个模块以提高代码的可维护性和安全性。然而,由于模块的隔离性,某些代码可能无法在模块之间进行正常的交互。这时,我们可以使用Java --add-opens选项来解决此类问题

加入以下配置

--add-opens
java.base/java.util=ALL-UNNAMED
--add-opens
java.base/java.lang=ALL-UNNAMED
--add-opens
java.base/java.math=ALL-UNNAMED
--add-opens
java.base/java.util.concurrent=ALL-UNNAMED
--add-opens
java.base/java.net=ALL-UNNAMED
--add-opens
java.base/java.text=ALL-UNNAMED

相关推荐

  1. sharding-mybatis分库

    2024-05-10 22:56:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 22:56:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 22:56:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 22:56:02       82 阅读
  4. Python语言-面向对象

    2024-05-10 22:56:02       91 阅读

热门阅读

  1. ArrayList线程不安全的情况

    2024-05-10 22:56:02       36 阅读
  2. 计算机系统基础知识

    2024-05-10 22:56:02       34 阅读
  3. 一些有趣的Chrome命令行调用例子

    2024-05-10 22:56:02       39 阅读
  4. qt的http原理

    2024-05-10 22:56:02       38 阅读
  5. 巩固学习3

    2024-05-10 22:56:02       39 阅读
  6. nodejs后台babel在线热编译jsx

    2024-05-10 22:56:02       30 阅读
  7. Mac 报错 Zsh: command not found :brew

    2024-05-10 22:56:02       34 阅读
  8. npm详解

    2024-05-10 22:56:02       34 阅读
  9. C++ 类和对象:面向对象编程基础

    2024-05-10 22:56:02       31 阅读
  10. 【算法】高精度(string实现)

    2024-05-10 22:56:02       39 阅读