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