1 应用场景

Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结。

一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周、2周、3个月内的数据。或是报表类应用。

这样的数据放在一个片区内省去了数据合并的时间。

当然按月数据量不要过大就OK。

 

2 环境说明

Windows 7

本机多数据库 Mysql 5.5.2

3306 端口下挂有4个库 : range_db_4、range_db_5、range_db_6、range_db_7

3310 端口下挂有4个库 : range_db_8、range_db_9、range_db_10、range_db_11

3 参数配置

3.1 数据库配置

mysql 客户端分别进入 3306 和 3310 服务,开始建立物理的schema。

CREATE SCHEMA `range_db_4` DEFAULT CHARACTER SET utf8 ;
CREATE SCHEMA `range_db_5` DEFAULT CHARACTER SET utf8 ;
CREATE SCHEMA `range_db_6` DEFAULT CHARACTER SET utf8 ;
CREATE SCHEMA `range_db_7` DEFAULT CHARACTER SET utf8 ;

...

3306 上

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mycat_sync_test |
| mysql |
| performance_schema |
| range_db_4 |
| range_db_5 |
| range_db_6 |
| range_db_7 |
+--------------------+
8 rows in set (0.00 sec)

3310上

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mycat_sync_test |
| mysql |
| performance_schema |
| range_db_10 |
| range_db_11 |
| range_db_8 |
| range_db_9 |
| traveldata_db_1 |
| traveldata_db_2 |
+--------------------+
10 rows in set (0.00 sec)

3.2 server.xml 配置

<!-- 开通test用户访问RANGEDB访问权限  RANGEDB是虚拟schema -->

<user name="test">
  <property name="password">test</property>
  <property name="schemas">TRDB,RANGEDB</property> 
</user>

3.3 schema.xml 配置

<!-- 设定虚拟 schema  RANGEDB 信息 -->

<schema name="RANGEDB" checkSQLschema="false" sqlMaxLimit="100">

  <!-- 设定虚拟表 t_range_date 对应至数据结点 dn4:dn11 一共8个数据分片,使用 sharding-by-date  分片规则 -->
  <table name="t_range_date" dataNode="dn4,dn5,dn6,dn7,dn8,dn9,dn10,dn11" rule="sharding-by-date" />
</schema>

<!-- 设定数据结点dn4:dn7 对应的host为 3306服务 以及对应的物理schema   -->

<dataNode name="dn4" dataHost="localhost3306" database="range_db_4" />
<dataNode name="dn5" dataHost="localhost3306" database="range_db_5" />
<dataNode name="dn6" dataHost="localhost3306" database="range_db_6" />
<dataNode name="dn7" dataHost="localhost3306" database="range_db_7" />

<!-- 设定数据结点dn8:dn11 对应的host为 3310 服务 以及对应的物理schema   -->

<dataNode name="dn8" dataHost="localhost3310" database="range_db_8" />
<dataNode name="dn9" dataHost="localhost3310" database="range_db_9" />
<dataNode name="dn10" dataHost="localhost3310" database="range_db_10" />
<dataNode name="dn11" dataHost="localhost3310" database="range_db_11" />

<!-- 设定datahost 3306  目前只配了一台物理机,若要做读写分离可以参考开场第1、2篇内容进行调整 -->

<dataHost name="localhost3306" maxCon="1000" minCon="10" balance="1"
  writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
  <heartbeat>select user()</heartbeat>
  <writeHost host="hostM3306" url="localhost:3306" user="root" password="root123"></writeHost>
</dataHost>

<!-- 设定datahost 3306 -->
<dataHost name="localhost3310" maxCon="1000" minCon="10" balance="1"
  writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
  <heartbeat>select user()</heartbeat>
  <writeHost host="hostM3310" url="localhost:3310" user="root" password="root123"></writeHost>
</dataHost>

3.4 rule.xml 配置

<!-- 分片字段对应到date_str 分片规则为partbymonth -->

<tableRule name="sharding-by-date">
  <rule>
    <columns>date_str</columns>
    <algorithm>partbymonth</algorithm>
  </rule>
</tableRule>

<!-- 分片规则 partbymonth 的配置  从 2015 -01 -01 开始分片 -->

<function name="partbymonth" class="org.opencloudb.route.function.PartitionByMonth">

  <property name="dateFormat">yyyy-MM-dd</property>
  <property name="sBeginDate">2015-01-01</property>
</function>

3.5 mycat 重新加载配置信息


访问Mycat 9066 管理口,并重新加载所有参数配置。

D:\bin\mysql\MySQL_3307\bin>mysql -utest -ptest -P 9066
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.8-mycat-1.5-beta-20160111170158 MyCat Server (monitor)

Copyright (c) 2000, 2011, 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> reload @@config_all;
Query OK, 1 row affected (0.36 sec)
Reload config success

4 数据验证

4.1 Mycat 建表

进入 Mycat 8066 服务口,选用 RANGEDB 库,同步create table。

D:\bin\mysql\MySQL_3310\bin>mysql -utest -ptest -P 8066
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.8-mycat-1.5-beta-20160111170158 MyCat Server (OpenCloundDB)

Copyright (c) 2000, 2011, 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> use RANGEDB;
Database changed
mysql> CREATE TABLE `t_range_date` ( `id` INT NOT NULL, `date` DATE NULL, `date_str` VARCHAR(45) NULL, `context` VARCHAR(45) NULL, PRIMARY KEY (`id`));

Query OK, 0 rows affected (0.09 sec)

4.2 数据插入与查询

由于只建立了8个分片,超出部分就直接抛数组越界异常了。

mysql> insert into t_range_date (id,date_str,context) values(1,'2015-01-01','month-1-str');

insert into t_range_date (id,date_str,context) values(2,'2015-02-01','month-2-str');

insert into t_range_date (id,date_str,context) values(3,'2015-03-01','month-3-str');

insert into t_range_date (id,date_str,context) values(4,'2015-04-01','month-4-str');

insert into t_range_date (id,date_str,context) values(5,'2015-05-01','month-5-str');

insert into t_range_date (id,date_str,context) values(6,'2015-06-01','month-6-str');

insert into t_range_date (id,date_str,context) values(7,'2015-07-01','month-7-str');

insert into t_range_date (id,date_str,context) values(8,'2015-08-01','month-8-str');

insert into t_range_date (id,date_str,context) values(9,'2015-09-01','month-9-str');

insert into t_range_date (id,date_str,context) values(10,'2015-10-01','month-10-str');

insert into t_range_date (id,date_str,context) values(11,'2015-11-01','month-11-str');

Query OK, 1 row affected (0.01 sec)

Query OK, 1 row affected (0.01 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.01 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.01 sec)

Query OK, 1 row affected (0.00 sec)

ERROR 1064 (HY000): Index: 8, Size: 8
ERROR 1064 (HY000): Index: 9, Size: 8
ERROR 1064 (HY000): Index: 10, Size: 8

mysql> select * from t_range_date;
+----+------+------------+-------------+
| id | date | date_str | context |
+----+------+------------+-------------+
| 2 | NULL | 2015-02-01 | month-2-str |
| 4 | NULL | 2015-04-01 | month-4-str |
| 5 | NULL | 2015-05-01 | month-5-str |
| 1 | NULL | 2015-01-01 | month-1-str |
| 3 | NULL | 2015-03-01 | month-3-str |
| 6 | NULL | 2015-06-01 | month-6-str |
| 7 | NULL | 2015-07-01 | month-7-str |
| 8 | NULL | 2015-08-01 | month-8-str |
+----+------+------------+-------------+
8 rows in set (0.01 sec)

4.3 物理库查询

前 4 个月份的数据进入 3306 服务的物理库

mysql> select * from range_db_4.t_range_date;

select * from range_db_5.t_range_date;

select * from range_db_6.t_range_date;

select * from range_db_7.t_range_date;

+----+------+------------+-------------+
| id | date | date_str | context |
+----+------+------------+-------------+
| 1 | NULL | 2015-01-01 | month-1-str |
+----+------+------------+-------------+
1 row in set (0.00 sec)

+----+------+------------+-------------+
| id | date | date_str | context |
+----+------+------------+-------------+
| 2 | NULL | 2015-02-01 | month-2-str |
+----+------+------------+-------------+
1 row in set (0.00 sec)

+----+------+------------+-------------+
| id | date | date_str | context |
+----+------+------------+-------------+
| 3 | NULL | 2015-03-01 | month-3-str |
+----+------+------------+-------------+
1 row in set (0.00 sec)

+----+------+------------+-------------+
| id | date | date_str | context |
+----+------+------------+-------------+
| 4 | NULL | 2015-04-01 | month-4-str |
+----+------+------------+-------------+
1 row in set (0.00 sec)

5 优缺点分析

1.可以做简单的按月分片,如果真要商起来,可以将一个季度的数据配置到相同的datanode 里去。

2.不能按年进行循环配置,如果数据结点不足时需要提前加入,并手动清理历史数据。

本篇完

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

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

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

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

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

  3. MyCat 学习笔记 第七篇.数据分片 之 按数据范围分片

    1 应用场景 Mycat 其实自带了2个数据范围分片的方案,一个是纯数据范围的分片,比如 1至 10000 号的数据放到分片1 ,10001 至 20000号数据放到分片2里. 另一个是数据常量形式的 ...

  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. Vue.js学习笔记 第六篇 内置属性

    computed属性 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  7. Django学习笔记第六篇--实战练习二--简易实现登录注册功能demo

    一.绪论: 简易实现登录功能demo,并没有使用默认身份验证模块,所以做的也很差,关闭了csrf保护,没有认证处理cookie和session,只是简单实现了功能.另外所谓的验证码功能是伪的. 二. ...

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

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

  9. .NET MVC 学习笔记(六)— 数据导入

    .NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...

随机推荐

  1. Eclipse启动报错:A java runtime Environment(JRE) or java Development……的解决办法

    第一种: 解决方法: 系统变量里设置下面: 变量名:JAVA_HOME 变量值:D:\Java\jdk1.8.0_31 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib; 变量名 ...

  2. Qt Style Sheet实践(三):QCheckBox和QRadioButton

    导读 单选按钮(QRadioButton)和复选框(QCheckBox)是界面设计中的重要元素.单选按钮只允许用户在一组选项中选择一个,且当其中一个被选中的时候,按钮组中的其他单选按钮自动取消.复选框 ...

  3. .Net配置文件——反射+配置文件存储类型实例

    配置文件+反射确实去除了选择语句的繁琐,带来了优美的赶脚! 首先改进了一下类(接上文): ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  4. 循序渐进开发WinForm项目(1) --数据库设计和项目框架的生成

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  5. 很有趣的Java分形绘制

    部分与整体以某种形式相似的形,称为分形. 首先我们举个例子:        我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形.换句话说,较小的分支通过放大适当的比例后可 ...

  6. C# ObjectCache、OutputCache缓存

    /// <summary> /// 缓存操作类 /// </summary> public class Cache { private static List<strin ...

  7. kFreeBsd 国内开源镜像站汇总

    从http://bbs.chinaunix.net/archiver/tid-3756178.html这里抽取了debian源中支撑kfreebsd架构的源. 中科大: http://debian.u ...

  8. DistributedCache小记

    一.DistributedCache简介 DistributedCache是hadoop框架提供的一种机制,可以将job指定的文件,在job执行前,先行分发到task执行的机器上,并有相关机制对cac ...

  9. gcd和拓展gcd算法

    gcd算法是用来求两个数最大公约数的算法,他是依靠辗转相除(中国好像叫辗转相减)法来求两个数的最大公约数,别的地方也有很多介绍不做过多赘述,主要提供代码供自己参考. gcd(int a,int b) ...

  10. Java内存泄露的原因

    Java内存泄露的原因 1.静态集合类像HashMap.Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将一直被Vector ...