mycat分片规则之分片枚举(sharding-by-intinfile)

刚开始看教程资料的时候,看教程文档感觉模糊,完全没明白分片枚举是个什么样的概念。于是网上搜素别人做的
案例来看,终于让我搜索到一份完整的测试案例,见如下地址:
 
https://www.cnblogs.com/ivictor/archive/2016/01/25/5155123.html
 
    看完这个案例,恍然大悟教程里说的按照省份区县保存的意思。谢谢网上无偿分享文档的人们。

好了。来开始测试。

在schema.xml里定义一个分片表,如下:
   
    [[email protected] conf]# vi schema.xml
     <schema name="hello" checkSQLschema="false" sqlMaxLimit="100">
                <!-- auto sharding by id (long) -->
                <table name="t1" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
                <table name="t6" dataNode="dn1,dn2,dn3" rule="sharding-by-intfile" />

t1是前面定义的范围分片表,现在定义的是t6,规则是sharding-by-infile就是分片枚举规则。

在rule.xml里看看规则的定义

<tableRule name="sharding-by-intfile">
<rule>
<columns>sharding_id</columns>
<algorithm>hash-int</algorithm>
</rule>
    </tableRule>

</function>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
    </function>

看看paritition-hash-int.txt的内容

[[email protected] conf]# cat partition-hash-int.txt 
10000=0
10010=1

以上都是默认的内容,现在修改成我们想要的样子,想法是,我的t6表格用来存取各地公司员工信息。
想根据地区来分片。

t6表格定义四列:id,name,bu,city。
    根据city来分片。

需要配置的文件:schema.xml设置t6分片表和定义分片规则;rule.xml根据实际情况修改分片表的列字段;
partition-hash-int.txt定义不同分片分别存储到哪个datanode。

前面配置好了schema.xml里 t6表分片和分片规则。

修改rule.xml里的分片表列字段

<tableRule name="sharding-by-intfile">
                <rule>
                        <columns>city</columns>
                        <algorithm>hash-int</algorithm>
                </rule>
    </tableRule>

改成city,我们是用city这个字段列来分片。

修改partition-hash-int.txt。这是测试,我准备插入三条数据,city分别是bj,gz,sz。规划bj的数据放入datanode1,
gz的数据放入datanode2,sz的数据放入datanode3。

配置如下:
    [[email protected] conf]# cat partition-hash-int.txt 
#10000=0
#10010=1
bj=0
gz=1
sz=2

重启mycat服务,然后测试。

[[email protected] conf]# ../bin/mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
    [[email protected] conf]#

重启后

[[email protected] conf]# mysql -uroot -p123456 -P8066 -h 127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
    
    数据库进来了

选择hello数据库,创建t6。

mysql> create table t6(id int not null,name varchar(20) not null,bu varchar(20) not null,city varchar(10) not null);
Query OK, 0 rows affected (1.03 sec)

插入数据测试下

mysql> insert into t6(id,name,bu,city)values(1,'am1','caiwu','bj');
ERROR 1064 (HY000): columnValue:bj Please check if the format satisfied.

发现报错。看文档教程:
    <property name="type">0</property> 
    <property name="defaultNode">0</property>
    
    说明如下:函数配置中,ype默认值为0,0表示Integer,非零表示String, 所有的节点配置都是从0开始,及0代表节点1。

/** * defaultNode 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点 
* 默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点 
* 如果不配置默认节点(defaultNode值小于0表示不配置默认节点),碰到 
* 不识别的枚举值就会报错, 
* like this:can’t find datanode for sharding column:column_name val:ffffffff 
    */
    
    应该是这个问题,我的city字段是字符,而默认是integer。修改测试看看。

修改rule.xml,改成如下:
        
</function>
        <function name="hash-int"
                class="io.mycat.route.function.PartitionByFileMap">
                <property name="mapFile">partition-hash-int.txt</property>
                <property name="type">1</property> 
                <property name="defaultNode">0</property>
        </function>

重启mycat服务。

再插入数据,正常

mysql> insert into t6(id,name,bu,city)values(1,'am1','caiwu','bj');
Query OK, 1 row affected (0.45 sec)

mysql> insert into t6(id,name,bu,city)values(2,'am2','caiwu','gz');
Query OK, 1 row affected (0.02 sec)

mysql> insert into t6(id,name,bu,city)values(3,'am3','caiwu','sz');
Query OK, 1 row affected (0.02 sec)

mysql>

看看实现分片了吗?

mysql> select * from t6;
+----+------+-------+------+
| id | name | bu    | city |
+----+------+-------+------+
|  2 | am2  | caiwu | gz   |
|  3 | am3  | caiwu | sz   |
|  1 | am1  | caiwu | bj   |
+----+------+-------+------+
3 rows in set (0.37 sec)

mysql> explain select * from t6;
+-----------+----------------------------+
| DATA_NODE | SQL                        |
+-----------+----------------------------+
| dn1       | SELECT * FROM t6 LIMIT 100 |
| dn2       | SELECT * FROM t6 LIMIT 100 |
| dn3       | SELECT * FROM t6 LIMIT 100 |
+-----------+----------------------------+
3 rows in set (0.01 sec)

mysql>

成功了。

原文地址:http://blog.51cto.com/goome/2058959

时间: 2024-10-08 22:40:29

mycat分片规则之分片枚举(sharding-by-intinfile)的相关文章

MyCAT常用分片规则之分片枚举

MyCAT支持多种分片规则,下面测试的这种是分片枚举.适用场景,列值的个数是固定的,譬如省份,月份等. 在这里,需定义三个值,规则均是在rule.xml中定义. 1. tableRule 2. function 3. mapFile 首先,定义tableRule, <tableRule name="sharding-by-intfile-test"> <rule> <columns>province</columns> <algor

mycat分片规则

配置:schema文件rule字段,rule文件name字段 (1)分片枚举:sharding-by-intfile (2)主键范围:auto-sharding-long (3)一致性hash:sharding-by-murmur (4)字符串hash解析:sharding-by-stringhash (5)按日期(天)分片:sharding-by-date (6)按单月小时拆分:sharding-by-hour (6)自然月分片:sharding-by-month --------常见的10种

mysql 第二十篇文章~mycat 分片规则的初步讲解

一 简介:今天咱们来聊聊分片规则的初步理解 二 前沿:mycat的分片规则是十分丰富的,此外还可以根据java进行扩展 三 文件:rule.xml 四 具体分片规则: <tableRule name="rule1">  <tableRule name="rule2">  <tableRule name="sharding-by-intfile">  <tableRule name="auto-s

MyCat 介绍、分片规则、调优的内容收集

一.MyCat的简介 MyCat高可用.负载均衡架构图: 详细知识点:  MySQL分布式集群之MyCAT(一)简介(修正) 二.MyCat的schema.xml讲解 详细知识点:MySQL分布式集群之MyCAT(二)schema详解(修正) 三.MyCat的分片规则 详细知识点:MySQL分布式集群之MyCAT(三)rule的分析 四.MyCat调优 详细知识点:MySQL分布式集群之MyCAT调优初探(四)

MyCat 学习笔记 第十篇.数据分片 之 ER分片

1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键进行数据分片,验证发现主表数据保存在第1个datanode中,子表数据根据分片规则存储. b. 依据分片关键字段进行分片,验证发现主表与子表根据分片规则存储,且保存在相同的分片内. 接下来,可以下实际配置与数据验证 2 环境说明 参考  <MyCat 学习笔记>第六篇.数据分片 之 按月数据分片 

linux中mycat的配置,分片,以及主从复制

1.1    安装环境 1.jdk:要求jdk必须是1.7及以上版本 2.Mysql:推荐mysql是5.5以上版本 1.2  安装步骤 Mycat有windows.linux多种版本.本教程为linux安装步骤,windows基本相同. 第一步:下载Mycat-server-xxxx-linux.tar.gz 第二步:将压缩包解压缩.建议将mycat放到/usr/local/mycat目录下. 第三步:进入mycat目录,启动mycat ./mycat start 停止: ./mycat st

MyCAT 源码解析 —— 分片结果合并(使用unsaferow)

1. 概述 2. 多分片执行 SQL 3. 合并多分片结果 3.1 记录头(header) 3.2 记录行(row) 3.1 AbstractDataNodeMerge 3.2 DataNodeMergeManager 3.3 UnsafeRow 3.4 UnsafeExternalRowSorter 3.5 UnsafeRowGrouper 4. 救护中心 ??????关注微信公众号:[芋道源码]有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表

MapReduce中TextInputFormat分片和读取分片数据源码级分析

InputFormat主要用于描述输入数据的格式(我们只分析新API,即org.apache.hadoop.mapreduce.lib.input.InputFormat),提供以下两个功能: (1)数据切分:按照某个策略将输入数据切分成若干个split,以便确定MapTask个数以及对应的split: (2)为Mapper提供输入数据:读取给定的split的数据,解析成一个个的key/value对,供mapper使用. InputFormat有两个比较重要的方法:(1)List<InputSp

NoSQL生态系统——hash分片和范围分片两种分片

13.4 横向扩展带来性能提升 很多NoSQL系统都是基于键值模型的,因此其查询条件也基本上是基于键值的查询,基本不会有对整个数据进行查询的时候.由于基本上所有的查询操作都是基本键值形式的,因此分片通常也基于数据的键来做:键的一些属性会决定这个键值对存储在哪台机器上.下面我们将会对hash分片和范围分片两种分片方式进行描述. 3.4.2 通过协调器进行数据分片 由于CouchDB专注于单机性能,没有提供类似的横向扩展方案,于是出现了两个项目:Lounge 和 BigCouch,他们通过提供一个p