Mycat(水平拆分 -- 分表)-01
相对于垂直拆分, 水平拆分不是将表做分类, 而是按照某个字段的某种规则来分散到多个库中. 每个表中 包含一部分数据. 简单来说, 我们可以将数据的水平切分理解为是按照数据行的切分, 就是将表中的某些行切分 到一个数据库, 而别的某些行又切分到其他的数据库中.
配置分表
1. 选择要拆分的表
MySQL 单表存储数据条数是有瓶颈的, 单表达到 1000 万条数据时就达到了瓶颈, 会影响查询效率, 需要进行水平拆分 (分表) 进行优化.
列如: 当 orders 和 orders_detail 都达到 600 万行数据, 需要进行分表优化.
2. 分表字段
以 orders 表为列, 可以根据不同字段进行分表编号分表字段效果1id(主键、或创建时间)查询订单注重时效,历史订单被查询的次数少,如此会形成一个节点访问多,一个节点访问少。
2customer_id(客户 id)根据客户 id 去分,两个节点访问平均,一个客户的所有订单都在同一个节点。
3. 修改配置文件 schema.xml# 为 orders 表设置数据节点 dn1,dn2, 并指定分片规则 mod_rule(自定义的名字)
4. 修改配置文件 rule.xml# 在 rule 配置文件里面新增分片规则 mod_rule, 并指定规则适用字段为 customer_id
#还有选择分片算法 mod-long(对字段取模运算),customer_id 对两个节点取模, 根据结果分片
#配置算法 mod-long 参数 count 为 2, 两个节点
customer_id
mod-long
往下找到算法的具体实现
5. 在数据节点 dn2 上建 orders 表
6. 重启 mycat.
7. 访问 mycat 实现分片insert into orders(id,order_type,customer_id,amount)values(1,1,1,1000.00);
insert into orders(id,order_type,customer_id,amount)values(2,1,2,1000.00);
insert into orders(id,order_type,customer_id,amount)values(3,1,3,1000.00);
insert into orders(id,order_type,customer_id,amount)values(4,1,4,1000.00);
insert into orders(id,order_type,customer_id,amount)values(5,1,5,1000.00);
insert into orders(id,order_type,customer_id,amount)values(6,1,6,1000.00);
查询 mycat:
dn1:
dn2:
来源: http://www.bubuko.com/infodetail-3711208.html