Mycat+SpringBoot完成分庫分表

mycat下載

官網下載

conf下的schema.xml的配置

:表示的是在mycat中的邏輯庫配置,邏輯庫名稱爲:TESTDB

:表示在mycat中的邏輯表配置,邏輯表名稱爲:user,映射到兩個數據庫節點dataNode中,切分規則爲:rule1(在rule.xml配置)

:表示數據庫節點,這個節點不一定是單節點,可以配置成讀寫分離.

:真實的數據庫的地址配置

:用戶心跳檢測

:寫庫的配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
            <table name="user" primaryKey="id" dataNode="dn01,dn02"  autoIncrement="false" rule="rule1"/>
			 <!-- 未分庫的表 -->  
			<table name="city" primaryKey="id" dataNode="dn02"  autoIncrement="false" rule="rule2"/>
    </schema>
	

    
    <!-- 設置dataNode 對應的數據庫,及 mycat 連接的地址dataHost -->  
    <dataNode name="dn01" dataHost="dh01" database="springboot_demo" />  
    <dataNode name="dn02" dataHost="dh01" database="ssm" />   
    
    <!-- mycat 邏輯主機dataHost對應的物理主機.其中也設置對應的mysql登陸信息 -->  
    <dataHost name="dh01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
            <heartbeat>select user()</heartbeat>  
            <writeHost host="server1" url="127.0.0.1:3306" user="root" password="113506"/>  
    </dataHost> 
</mycat:schema>

分配規則

  • 分片枚舉

  • 固定分片 hash 算法

  • 範圍約定

  • 取模 mod-long

  • 按日期(天)分片

  • 取模範圍約束

  • 截取數字做 hash 求模範圍約束

  • 應用指定

  • 截取數字 hash 解析

  • 一致性 hash

  • 按單月小時拆分

  • 範圍求模分片

  • 日期範圍 hash 分片

  • 冷熱數據分片

  • 自然月分片

conf/rule.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
    <tableRule name="rule1">
        <rule>
            <columns>id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
	<tableRule name="rule2">
        <rule>
            <columns>id</columns>
            <algorithm>mod-long2</algorithm>
        </rule>
    </tableRule>
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">2</property>
    </function>
	
	
	    <function name="mod-long2" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">1</property>
    </function>
	
</mycat:rule>

在兩個物理數據庫的創建表

CREATE TABLE user
(
id int PRIMARY KEY ,
name VARCHAR(10)
)

springbootd的配置文件 這裏連接的是mycat

#配置數據源
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
#這裏配置的是Mycat中server.xml中配置賬號密碼,不是數據庫的密碼。
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
#mycat的邏輯庫 端口也是mycat的
spring.datasource.druid.url=jdbc:mysql://172.18.9.166:8066/TESTDB

批量插入數據

    @Test
    void addList() {
        List<User> users = new ArrayList<>();
        for (int i = 3; i < 100; i++) {
            User user = new User();
            //必須設置id,即使物理數據庫的id設置爲自增長都不行
            user.setId(i);
            user.setName("xiaobu" + i);
            users.add(user);
        }
        int count = userMapper.insertList(users);
        System.out.println("count = " + count);
    }

查詢

package com.xiaobu.controller;

import com.xiaobu.mapper.UserMapper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author xiaobu
 * @version JDK1.8.0_171
 * @date on  2019/12/6 10:33
 * @description
 */
@RestController
@RequestMapping("user")
public class UserController {

    @Resource
    private UserMapper userMapper;

    @GetMapping("insert")
    @ResponseBody
    public String insert(){
        return null;
    }




    @GetMapping("selectAll")
    @ResponseBody
    public String selectAll(){
        return userMapper.selectAll().toString();
    }
}

可以看到數據插入成功了
1576639640(1).jpg

mycat 連接屬性

微信截圖_20191218112939.png

數據查詢
QQ截圖20191218113838.png

兩個物理表數據存儲情況

springboot_demo.user

QQ截圖20191218114756.png

ssm.user

QQ截圖20191218114805.png

參考:

數據庫中間件Mycat+SpringBoot完成分庫分表

發佈了154 篇原創文章 · 獲贊 21 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章