IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> ShardingSphere集成SpringBoot实现分库分表(二)-分库分表 -> 正文阅读

[Java知识库]ShardingSphere集成SpringBoot实现分库分表(二)-分库分表

1.继上一篇文章的基础上进行实现分库分表操作??application.yml配置文件为:

spring:
  shardingsphere:
    datasource:
      names: ds-0,ds-1
      ds_0:
        url: jdbc:mysql://127.0.0.1:3306/ds-0?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&useInformationSchema=false
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        username: root
        password: hzp123456
      ds_1:
        url: jdbc:mysql://127.0.0.1:3306/ds-1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&useInformationSchema=false
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        username: root
        password: hzp123456
    sharding:
      tables:
        user:
          actual-data-nodes: ds-$->{0..1}.user
          database-strategy:
            standard:
              sharding-column: age
              precise-algorithm-class-name: com.shardingsphere.algorithm.DefaultModuloPreciseShardingAlgorithm
          key-generator:
            column: id
            type: SNOWFLAKE
            props:
              worker.id: 11
              executor.size: 4
              max.connections.size.per.query: 1
              check.table.metadata.enabled: false
        message:
          actual-data-nodes: ds-$->{0..1}.message_$->{0..1}
          database-strategy:
            standard:
              sharding-column: contact_id
              precise-algorithm-class-name: com.shardingsphere.algorithm.DefaultModuloPreciseShardingAlgorithm
          table-strategy:
            standard:
              sharding-column: msg_id
              precise-algorithm-class-name: com.shardingsphere.algorithm.DefaultModuloPreciseShardingAlgorithm
          key-generator:
            column: msg_id
            type: SNOWFLAKE
            props:
              worker.id: 22
              executor.size: 4
              max.connections.size.per.query: 1
              check.table.metadata.enabled: false
    props:
      sql.show: true

主要对以上配置文件中的message表进行分库分表? ?如以上根据message表中的contact_id进行分库 根据contact_id的奇偶数判断 分别入库到ds-0 ds-1中? ?? ?根据message表中的msg_id进行分表 根据?msg_id的奇偶数判断 分别入库到ds-0 ds-1中message_0,message_1? 执行的先后顺序是先分库后分表? ?

2.在库ds-0 ds-1中分别创建表message_0,message_1? ? 创建脚本如下:

DROP TABLE IF EXISTS `message_0`;
CREATE TABLE `message_0` ?(
? `msg_id` bigint(20) NOT NULL,
? `contact_id` bigint(20) NOT NULL,
? `user_id` bigint(20) NOT NULL,
? `user_tag` bit(1) NULL DEFAULT NULL,
? `recall_time` datetime NULL DEFAULT NULL,
? `content` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
? `push_msg` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
? `creation_time` datetime NULL DEFAULT NULL,
? PRIMARY KEY (`msg_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

DROP TABLE IF EXISTS `message_1`;
CREATE TABLE `message_1` ?(
? `msg_id` bigint(20) NOT NULL,
? `contact_id` bigint(20) NOT NULL,
? `user_id` bigint(20) NOT NULL,
? `user_tag` bit(1) NULL DEFAULT NULL,
? `recall_time` datetime NULL DEFAULT NULL,
? `content` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
? `push_msg` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
? `creation_time` datetime NULL DEFAULT NULL,
? PRIMARY KEY (`msg_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

3.创建Message实体类:
?

package com.shardingsphere.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 发送消息内容
 */
@Data
public class Message implements Serializable {
    private static final long serialVersionUID = 2921554930924807501L;

    @TableId(type = IdType.ASSIGN_ID)
    private Long msgId;

    private Long contactId;

    private Long userId;

    private Boolean userTag;

    private Date recallTime;

    private String content;

    private String pushMsg;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date creationTime;
}

4.创建MessageMapper接口? 并继承mybatisPlus中的BaseMapper? 代码如下:

package com.shardingsphere.Mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shardingsphere.entity.Message;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

/**
 * @Author 何志鹏
 * @Date 2022/7/18 10:59
 * @Version 1.0
 */
@Mapper
@Repository
public interface MessageMapper extends BaseMapper<Message> {


}

5.创建测试方法DemoTest:

package com.shardingsphere;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil;
import com.shardingsphere.Mapper.MessageMapper;
import com.shardingsphere.entity.Message;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;

/**
 * @Author 何志鹏
 * @Date 2022/7/15 15:15
 * @Version 1.0
 */
@SpringBootTest
public class DemoTest {
    
    @Autowired
    private MessageMapper messageMapper;

    
    /**
     * 测试Message分库
     */
    @Test
    void addMessage() {
       for (int i = 0; i < 10000; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Message message = new Message();
                    int randomNum = (int) (Math.random() * 9000 + 1000);

                    Snowflake snowflake = IdUtil.createSnowflake(1, 1);
                    message.setContactId(snowflake.nextId()+randomNum);

                    message.setUserId(new Long(randomNum));
                    message.setUserTag(Boolean.TRUE);
                    message.setRecallTime(new Date());
                    message.setContent("测试测试");
                    message.setPushMsg("111111111111");
                    message.setCreationTime(new Date());
                    messageMapper.insert(message);
                }
            }).run();
        }


        //ds-0库
        Message ds_0_Message_0 = messageMapper.selectById(755815881623298048L);
        System.err.println("ds-0库Message_0表:"+JSONUtil.parseObj(ds_0_Message_0));
        Message ds_0_Message_1 = messageMapper.selectById(755815839168552961L);
        System.err.println("ds-0库Message_1表:"+JSONUtil.parseObj(ds_0_Message_1));
        //ds-1库
        Message ds_1_Message_0 = messageMapper.selectById(755815841399922688L);
        System.err.println("ds-1库Message_0表:"+JSONUtil.parseObj(ds_1_Message_0));
        Message ds_1_Message_1 = messageMapper.selectById(755815845208350721L);
        System.err.println("ds-1库Message_1表:"+JSONUtil.parseObj(ds_1_Message_1));


    }
}
6.查看数据库中的插入数据和查询的结果 如下:

?

?

?最后附上代码:?https://gitee.com/hezhipeng_ek/shardingsphere.git

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:38:23  更:2022-07-20 18:39:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 7:26:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码