美文网首页
Mycat分库--范围求模分片实践

Mycat分库--范围求模分片实践

作者: sknfie | 来源:发表于2020-08-27 10:35 被阅读0次

概述

先进行范围分片计算出分片组,组内再求模:

  • 优点可避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题;
  • 综合了范围分片和求模分片的 优点,分片组内使用求模可保证组内数据比较均匀,分片组之间是范围分片,可以兼顾范围查询;
  • 最好事先规划好分片的数量,数据扩容时按分片组扩容,则原有分片组的数据不需要迁移。由二分片组内数据比较均匀,所以分片组内可避免范围分片的热点问题。

创建表

DROP TABLE IF EXISTS `t_range`;
CREATE TABLE `t_range` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置

  • schema.xml
<table name="t_range" primaryKey="id" dataNode="node1,node2" rule="auto-sharding-rang-mod" />
  • rule.xml
<tableRule name="auto-sharding-rang-mod">
    <rule>
        <columns>id</columns>
        <algorithm>rang-mod</algorithm>
    </rule>
</tableRule>

<function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
    <property name="mapFile">partition-range-mod.txt</property>
    <property name="defaultNode">0</property>
</function>
  • partition-range-mod.txt
# range start-end ,data node group size
0-1M=1
1M1-2M=1

测试

mysql -umycat -p123456 -P 8066 -h 192.168.201.34 -DTESTDB

MySQL [TESTDB]> INSERT INTO t_range (id, name)VALUES ('9999', 'db111');
Query OK, 1 row affected (0.09 sec)

MySQL [TESTDB]> explain select * from t_range;
+-----------+---------------------------------+
| DATA_NODE | SQL                             |
+-----------+---------------------------------+
| node1     | SELECT * FROM t_range LIMIT 100 |
| node2     | SELECT * FROM t_range LIMIT 100 |
+-----------+---------------------------------+
2 rows in set (0.06 sec)

MySQL [TESTDB]> explain select * from t_range where id=9999; 
+-----------+-------------------------------------+
| DATA_NODE | SQL                                 |
+-----------+-------------------------------------+
| node1     | select * from t_range where id=9999 |
+-----------+-------------------------------------+
1 row in set (0.03 sec)

MySQL [TESTDB]> INSERT INTO t_range (id, name)VALUES ('10000', 'db111');
Query OK, 1 row affected (0.01 sec)

MySQL [TESTDB]> explain select * from t_range where id=10000;     
+-----------+--------------------------------------+
| DATA_NODE | SQL                                  |
+-----------+--------------------------------------+
| node1     | select * from t_range where id=10000 |
+-----------+--------------------------------------+
1 row in set (0.00 sec)

MySQL [TESTDB]> INSERT INTO t_range (id, name)VALUES ('10001', 'db222');
Query OK, 1 row affected (0.02 sec)

MySQL [TESTDB]> explain select * from t_range where id=10001;                   
+-----------+--------------------------------------+
| DATA_NODE | SQL                                  |
+-----------+--------------------------------------+
| node2     | select * from t_range where id=10001 |
+-----------+--------------------------------------+
1 row in set (0.01 sec)

MySQL [TESTDB]> INSERT INTO t_range (id, name)VALUES ('20000', 'db222');
Query OK, 1 row affected (0.01 sec)

MySQL [TESTDB]> explain select * from t_range where id=10002;                   
+-----------+--------------------------------------+
| DATA_NODE | SQL                                  |
+-----------+--------------------------------------+
| node2     | select * from t_range where id=10002 |
+-----------+--------------------------------------+
1 row in set (0.00 sec)

mysql -u root -p123456  -h 192.168.201.33
MariaDB [db1]> select * from t_range;
+-------+--------------+
| id    | name         |
+-------+--------------+
|  9999 | db111 |
| 10000 | db111 |
+-------+--------------+
2 rows in set (0.00 sec)

mysql -u root -p123456  -h 192.168.201.35
MariaDB [db2]> select * from t_range;
+-------+--------------+
| id    | name         |
+-------+--------------+
| 10001 | db222 |
| 20000 | db222 |
+-------+--------------+
2 rows in set (0.00 sec)

相关文章

  • Mycat分库--范围求模分片实践

    概述 先进行范围分片计算出分片组,组内再求模: 优点可避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题...

  • Mycat分库--取模分片实践

    概述 本文对分片字段求摸运算进行实验。 配置 有 user 和 t_order 两张数据表,表 user 的数据全...

  • Mycat分库--日期分片实践

    概述 本文进行日期分片实验。 配置 分片路由: 分片规则 配置说明: columns :标识将要分片的表字段 al...

  • 49 mycat分片集群mysql分片分表策略

    1、数据库集群如何保证自动增长唯一性2、数据库分表分库策略3、MyCat分片集群策略4、MyCat分片策略原理 M...

  • mycat分库分片(bat面试)

    概述 Mycat是基于阿里Cobar演变而来的一款开源分布式数据库中间件,是一个实现了MySQL协议的Server...

  • MyCAT+MySQL搭建高可用企业级数据库集群 百度云百度网盘

    内容介绍 MyCAT入门 MYCAT核心配置详解 MYCAT进阶实战之垂直分库 MYCAT进阶实战之水平分库 My...

  • MYSQL分库分表

    大众点评订单系统分库分表实践 利用Mycat中间件实现RDS MySQL的分库分表及读写分离功能 MYSQL数...

  • 架构师进阶实战随堂笔记十

    场景十:分布式数据管理问题 分布式事务和分库分表方法介绍与实践经验分享 目录 分库分表 为什么分片 分库分表策略 ...

  • Mycat分库--全局表实践

    概述 MyCAT 定义了一种特殊的表,称为“全局表”,全局表具有以下特性:• 全局表的插入、更新操作会实时在所有节...

  • Mycat分库--ER Join实践

    概述 基于 E-R 关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。 ER分片 ER分片父...

网友评论

      本文标题:Mycat分库--范围求模分片实践

      本文链接:https://www.haomeiwen.com/subject/acqcsktx.html