前言
本章主要整理 MyCat核心配置說明
圖片來源:https://coding.imooc.com/class/208.html
核心配置文件說明
文件名 | 說明 | 功能 |
---|---|---|
server.xml | 虛擬MySQL | 配置系統相關參數 配置用戶訪問權限 配置SQL防火牆及SQL攔截功能 |
schema.xml | 數據庫配置 | 配置邏輯庫及邏輯表 配置邏輯表所存儲的數據節點 配置數據節點所對應的物理數據庫服務信息 |
rule.xml | 切片規則 | 配置水平分片的分片規則 配置分片規則所對應的分片函數 |
log4j2.xml | 日誌文件 | 配置輸出日誌的格式 配置輸出日誌的級別 |
核心文件 - rule.xml
完整配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="order_master">
<rule>
<columns>customer_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">4</property>
</function>
</mycat:rule>
<tableRule>
標籤配置表的分片規則
- name 屬性指定分片表規則的名字,這個命名要唯一
<columns>
標籤指定表的分片列<algorithm>
指定表的分片算法,取<function>
的name屬性
<function>
配置表的分片算法
- name 屬性定義分片算法的名字
- class 指定分片算法java類
- property 參數名,參數值
常見分片算法
分片算法 | 說明 | 適合場景 |
---|---|---|
PartitionByMod | 簡單取模 | 數據增長速度慢,難於增加分片 |
PartitionByHashMod | 哈希取模 | 數字無法分片時 |
PartitionByFileMap | 分片枚舉(枚舉值切分) | 歸類存儲數據,適合大多數業務 |
PartitionByPrefixPattern | 字符串訪問取模分片 | 可以根據指定字符串的前N個字符確認存儲位置 |
AutoPartitionByLong | 範圍分片 | 數據快速增長,容易增加分片 |
PartitionByDate | 日期(天)分片 | 數據快速增長,容易增加分片 |
簡單取模 - PartitionByMod
介紹
- 可以用於分片列爲整數類型的表
- 分片列 mod 分片基數
- 類全名:io.mycat.route.function.PartitionByMod
適合場景
- 求模切分適合用於初始化數據很大,但是數據增長不快的場景
- 場景:地圖產品、行政數據、企業數據
弊端
- 如後期要擴展多個MySQL時,我們需進行數據遷移(萬不得已是, 建議使用x2)
實現原理
代碼實例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="customer_login">
<rule>
<columns>customer_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">2</property>
</function>
</mycat:rule>
哈希取模 - PartitionByHashMod
- 可以用於多種類型數據如字符串,日期等
- hash(分片列) mod 分片基數
- 類全名:io.mycat.route.function.PartitionByHashMod
實現原理
代碼實例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="customer_login">
<rule>
<columns>login_name</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByHashMod">
<property name="count">2</property>
</function>
</mycat:rule>
分片枚舉 - PartitionByFileMap
介紹
-
按照某個字段的值(數字)來切分數據
-
可以根據可能得枚舉值指定數據存儲的位置
-
$MYCAT/conf 目錄下增加MapFile配置枚舉值同節點的對應關係
-
類全名:io.mycat.route.function.PartitionByFileMap
適合場景
- 按照城市切分業務,某個城市出問題了,也隻影響某城市的數據讀取
弊端
- 分佈不均勻
實現原理
代碼實例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="sharding-by-intfile">
<rule>
<columns>user_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
<property name="type">0</property>
<property name="defaultNode">0</property>
</function>
</mycat:rule>
partition-hash-int.txt 配置:
10000=0
10001=1
DEFAULT_NODE=0
補充屬性說明
屬性 | 說明 |
---|---|
type | 0:integer,非0:string |
defaultNode | >=0 :啓動默認節點,<0 不啓動默認節點 |
字符串訪問取模分片 - PartitionByPrefixPattern
- 可以根據指定字符串的前N個字符確認存儲位置
- $MYCAT/conf 增加MapFile配置取模範圍同節點的對應關係
- 類全名:io.mycat.route.function.PartitionByPrefixPattern
代碼實例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="sharding-by-prefixpattern">
<rule>
<columns>user_id</columns>
<algorithm>sharding-by-prefixpattern</algorithm>
</rule>
</tableRule>
<function name="sharding-by-pattern"
class="io.mycat.route.function.PartitionByPrefixPattern">
<property name="patternValue">256</property>
<property name="prefixLength">5</property>
<property name="mapFile">partition-pattern.txt</property>
</function>
</mycat:rule>
partition-pattern.txt
0-63=0
64-127=1