MyCat 基础 - 配置文件 - rule

前言

本章主要整理 MyCat核心配置说明
图片来源:https://coding.imooc.com/class/208.html

核心配置文件说明

文件名 说明 功能
server.xml 虚拟MySQL 配置系统相关参数
配置用户访问权限
配置SQL防火墙及SQL拦截功能
schema.xml 数据库配置 配置逻辑库及逻辑表
配置逻辑表所存储的数据节点
配置数据节点所对应的物理数据库服务信息
rule.xml 切片规则 配置水平分片的分片规则
配置分片规则所对应的分片函数
log4j2.xml 日志文件 配置输出日志的格式
配置输出日志的级别

核心文件 - rule.xml

完整配置



<mycat:rule xmlns:mycat="http://io.mycat/">
	<tableRule name="order_master">
		<rule>
			<columns>customer_idcolumns>
			<algorithm>mod-longalgorithm>
		rule>
	tableRule>
	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<property name="count">4property>
	function>
mycat:rule>

标签配置表的分片规则

  • name 属性指定分片表规则的名字,这个命名要唯一
  • 标签指定表的分片列
  • 指定表的分片算法,取的name属性

配置表的分片算法

  • name 属性定义分片算法的名字
  • class 指定分片算法java类
  • property 参数名,参数值

常见分片算法

分片算法 说明 适合场景
PartitionByMod 简单取模 数据增长速度慢,难于增加分片
PartitionByHashMod 哈希取模 数字无法分片时
PartitionByFileMap 分片枚举(枚举值切分) 归类存储数据,适合大多数业务
PartitionByPrefixPattern 字符串访问取模分片 可以根据指定字符串的前N个字符确认存储位置
AutoPartitionByLong 范围分片 数据快速增长,容易增加分片
PartitionByDate 日期(天)分片 数据快速增长,容易增加分片

简单取模 - PartitionByMod

介绍

  • 可以用于分片列为整数类型的表
  • 分片列 mod 分片基数
  • 类全名:io.mycat.route.function.PartitionByMod

适合场景

  • 求模切分适合用于初始化数据很大,但是数据增长不快的场景
  • 场景:地图产品、行政数据、企业数据

弊端

  • 如后期要扩展多个MySQL时,我们需进行数据迁移(万不得已是, 建议使用x2)

实现原理
MyCat 基础 - 配置文件 - rule_第1张图片

代码实例



<mycat:rule xmlns:mycat="http://io.mycat/">
	<tableRule name="customer_login">
		<rule>
			<columns>customer_idcolumns>
			<algorithm>mod-longalgorithm>
		rule>
	tableRule>
	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<property name="count">2property>
	function>
mycat:rule>

哈希取模 - PartitionByHashMod

  • 可以用于多种类型数据如字符串,日期等
  • hash(分片列) mod 分片基数
  • 类全名:io.mycat.route.function.PartitionByHashMod

实现原理
MyCat 基础 - 配置文件 - rule_第2张图片

代码实例



<mycat:rule xmlns:mycat="http://io.mycat/">
	<tableRule name="customer_login">
		<rule>
			<columns>login_namecolumns>
			<algorithm>mod-longalgorithm>
		rule>
	tableRule>
	<function name="mod-long" class="io.mycat.route.function.PartitionByHashMod">
		<property name="count">2property>
	function>
mycat:rule>

分片枚举 - PartitionByFileMap

介绍

  • 按照某个字段的值(数字)来切分数据

  • 可以根据可能得枚举值指定数据存储的位置

  • $MYCAT/conf 目录下增加MapFile配置枚举值同节点的对应关系

  • 类全名:io.mycat.route.function.PartitionByFileMap

适合场景

  • 按照城市切分业务,某个城市出问题了,也只影响某城市的数据读取

弊端

  • 分布不均匀

实现原理
MyCat 基础 - 配置文件 - rule_第3张图片

代码实例



<mycat:rule xmlns:mycat="http://io.mycat/">
	<tableRule name="sharding-by-intfile">
		<rule>
			<columns>user_idcolumns>
			<algorithm>hash-intalgorithm>
		rule>
	tableRule>
	<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
    <property name="mapFile">partition-hash-int.txtproperty>
    <property name="type">0property>
    <property name="defaultNode">0property>
	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

MyCat 基础 - 配置文件 - rule_第4张图片
MyCat 基础 - 配置文件 - rule_第5张图片

代码实例



<mycat:rule xmlns:mycat="http://io.mycat/">
  <tableRule name="sharding-by-prefixpattern">
    <rule>
      <columns>user_idcolumns>
      <algorithm>sharding-by-prefixpatternalgorithm>
    rule>
  tableRule>
  <function name="sharding-by-pattern"
  		class="io.mycat.route.function.PartitionByPrefixPattern">
   
    <property name="patternValue">256property>
    <property name="prefixLength">5property>
    <property name="mapFile">partition-pattern.txtproperty>
  function>
mycat:rule>

partition-pattern.txt

0-63=0
64-127=1

你可能感兴趣的:(Linux,Java)