1 应用场景

Mycat 其实自带了2个数据范围分片的方案,一个是纯数据范围的分片,比如 1至 10000 号的数据放到分片1 ,10001 至 20000号数据放到分片2里。

另一个是数据常量形式的分片,即 10000号进入分片1 ,20000号进入片分2 。

2 环境说明

参考前一篇文章   《MyCat 学习笔记》第六篇.数据分片 之 按月数据分片  http://www.cnblogs.com/kaye0110/p/5160826.html

3 参数配置

3.1 server.xml 配置

参考前一篇

3.2 schema.xml 配置

<!-- t_range_long 表是根据数据范围进行分片,分片组为 dn4\dn5\dn6 ,分布规则为 sharding-long   -->

<schema name="RANGEDB" checkSQLschema="false" sqlMaxLimit="100">
  <table name="t_range_date" dataNode="dn4,dn5,dn6,dn7,dn8,dn9,dn10,dn11" rule="sharding-by-date" />
  <table name="t_range_long" dataNode="dn4,dn5,dn6" rule="sharding-long" />
</schema>

3.3 rule.xml 配置

<!-- sharding-long 规则使用rang-long方案,在sharding_id上做分片 -->

<tableRule name="sharding-long">
  <rule>
    <columns>sharding_id</columns>
    <algorithm>rang-long</algorithm>
  </rule>
</tableRule>

<!-- 分片方案实现的类 以及默认数据集结点 -->

<function name="rang-long" class="org.opencloudb.route.function.AutoPartitionByLong">
  <property name="mapFile">autopartition-long.txt</property>
  <property name="defaultNode">0</property>
</function>

#autopartition-long.txt

#第0至500,0000条记录进入dn1,第500,0001至1000,0000记录进入dn2

# range start-end ,data node index

# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

4 数据验证

4.1 Mycat 建表

mysql> CREATE TABLE `t_range_long` (
-> `id` INT NOT NULL,
-> `context` VARCHAR(45) NULL,
-> `sharding_id` VARCHAR(40) NULL,
-> PRIMARY KEY (`id`));
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 4
Current database: RANGEDB

Query OK, 0 rows affected (0.03 sec)

4.2 数据插入与查询

mysql> truncate table t_range_long;

Query OK, 0 rows affected (0.01 sec)

mysql> insert into t_range_long (id,context,sharding_id) values (1,'rec 5000000',5000000);   --> dn4
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_range_long (id,context,sharding_id) values (2,'rec 5000001',5000001);   --> dn5
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_range_long (id,context,sharding_id) values (3,'rec 10000000',10000000); --> dn5
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_range_long (id,context,sharding_id) values (4,'rec 10000001',10000001); --> dn6
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_range_long (id,context,sharding_id) values (5,'rec 15000000',15000000); --> dn6
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_range_long (id,context,sharding_id) values (6,'rec 15000001',15000001); --> dn4
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_range_long;
+----+--------------+-------------+
| id | context | sharding_id |
+----+--------------+-------------+
| 2 | rec 5000001 | 5000001 |
| 3 | rec 10000000 | 10000000 |
| 1 | rec 5000000 | 5000000 |
| 6 | rec 15000001 | 15000001 |
| 4 | rec 10000001 | 10000001 |
| 5 | rec 15000000 | 15000000 |
+----+--------------+-------------+
6 rows in set (0.00 sec)

4.3 物理库查询

分别对应用dn4\dn5\dn6

mysql> select * from range_db_4.t_range_long;

+----+--------------+-------------+
| id | context | sharding_id |
+----+--------------+-------------+
| 1 | rec 5000000 | 5000000 |
| 6 | rec 15000001 | 15000001 |
+----+--------------+-------------+
2 rows in set (0.00 sec)

mysql> select * from range_db_5.t_range_long;
+----+--------------+-------------+
| id | context | sharding_id |
+----+--------------+-------------+
| 2 | rec 5000001 | 5000001 |
| 3 | rec 10000000 | 10000000 |
+----+--------------+-------------+
2 rows in set (0.00 sec)

mysql> select * from range_db_6.t_range_long;
+----+--------------+-------------+
| id | context | sharding_id |
+----+--------------+-------------+
| 4 | rec 10000001 | 10000001 |
| 5 | rec 15000000 | 15000000 |
+----+--------------+-------------+
2 rows in set (0.00 sec)

5 优缺点分析

用起来还算方便,以后要做数据迁移也相对简单一些,适合做B2B2C系统商户专有数据或是应用租户模式(微商平台)之类。

MyCat 学习笔记 第七篇.数据分片 之 按数据范围分片的更多相关文章

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

    1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...

  2. MyCat 学习笔记 第八篇.数据分片 之 求摸运算分片

    1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值取摸应该是最简单的一种. 优点:数据离散概率较为平均,可以有效的提高应用的数据吞吐. 缺点:比较明显,后期数据运维与迁移比较困难.好在M ...

  3. MyCat 学习笔记 第六篇.数据分片 之 按月数据分片

    1 应用场景 Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结. 一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周.2周.3个月内的数据.或是报 ...

  4. MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  5. MyCat 学习笔记 第十一篇.数据分片 之 分片数据查询 ( select * from table_name limit 100000,100 )

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  6. Django学习笔记第七篇--实战练习三--关于更有层级的url请求、404错误以及其他响应函数

    一.关于更有层级的URL: 可以实现每一个APP一个子URL目录,例如app1的所有操作都在http://www.localhost1.com:5443/app1/xxxx 在工程主文件夹下的工程同名 ...

  7. Vue.js学习笔记 第七篇 表单控件绑定

    本篇主要说明表单控件的数据绑定,这次没有新的知识点 文本框 1.普通文本框 <div id="app-1"> <p><input v-model=&q ...

  8. MyCat 学习笔记 第九篇.数据分片 之 数值分布

    1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值分片也是比较简单,其实这个和数据取摸是类似的实现. 优.缺点同上一篇 2 环境说明 参考  <MyCat 学习笔记>第六篇. ...

  9. PHP学习笔记之数组篇

    摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇   一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...

随机推荐

  1. web面试题大全

    $HTML, HTTP,web综合问题 常见排序算法的时间复杂度,空间复杂度 前端需要注意哪些SEO web开发中会话跟踪的方法有哪些 <img>的title和alt有什么区别 docty ...

  2. 【状态模式】 State Pattern

    我们先设计一个场景,饮料自动售卖机,来设计一下它的出售流程. 流程图中,我们可把这个过程看成几个状态: 投币状态,选择饮料状态,售出状态,出售完毕状态. ,有了这个四个状态,我们设计一下界面(很粗略) ...

  3. 【原创】有关Silverlight控件DataGrid的绑定数据后单元格单独复制的功能实现分析

    前些日子,公司新需求需要对silverlight的datagrid进行局部任意单元格数据可复制,查阅了半天网络资料愣是没找到相关资料,开始还以为是silverlight的bug根部无法实现, 最后还是 ...

  4. Windows下 C++ 实现匿名管道的读写操作

    由于刚弄C++没多久,部分还不熟练,最近又由于开发需求要求实现与其他程序进行通信,瞬间就感觉想到了匿名通信.于是自己查阅了一下资料,实现了一个可读可写的匿名管道: 源代码大部分都有注释: Pipe.h ...

  5. Mysql的简单使用(三)

    接上文Mysql的简单使用(二) mysql中结构相同的两个表进行合并:(注意需要两个表的结构是一样的) 有如下结构的两个表father和person. 合并的步骤为: 1.把person表和fath ...

  6. 利用PBfunc在Powerbuilder中使用https获取微信的AccessToken

    在前篇中讲解了使用PBFunc在Powerbuilder自己进行http的GET和POST操作. 本篇简单用代码演示下https的微信AccessToken的获取: n_pbfunc_http lnv ...

  7. Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程 分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使 ...

  8. 【iOS】Quartz2D截屏

    一.简单说明 在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏.如图: 完成截屏功能的核心代码:- (void)renderInContext:(CGContextRef)ctx;调用 ...

  9. 解决SlidingMenu和SwipeBackLayout右滑事件冲突问题

    SwipeBackLayout向右滑动关闭当前Activity,SlidingMenu向右滑动则是打开menu部分.在同一个Activity中,当SlidingMenu处于打开状态时,此时向右滑动,事 ...

  10. vmware mysql报kernel: EXT4-fs (dm-0): Unaligned AIO/DIO on inode 1055943 by mysqld; performance will be poor

    kernel: EXT4-fs (dm-0): Unaligned AIO/DIO on inode 1055943 by mysqld; performance will be poor