MyCat 基礎 - 配置文件 - rule

前言

本章主要整理 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

字符串訪問取模1
字符串訪問取模2

代碼實例

<?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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章