mysql mycat单库分表_mycat 分库分表之单库多表策略

概述

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

分库分表就是将原本存储于单个数据库上的数据拆分到多个数据库,把原来存储在单张数据表的数据拆分到多张数据表中,实现数据切分,从而提升数据库操作性能。

根据业务的实际需要,基于 MyCAT 的分布式数据存储方案提供两种分片策略:垂直分片和水平分片。

垂直分片(分库)

一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类, 分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面, 如何划分表分库的原则: 有紧密关联关系的表应该在一个库里,相互没有关联关系的表可以分到不同的库里。

> 一般情况下,微服务架构的方式比较合适采用垂直分片的方式。

水平分片(分表)

相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中, 每个表中包 含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分 到一个数据库,而另外的某些行又切分到其他的数据库中. 实现分表选择要拆分的表 MySQL 单表存储数据条数是有瓶颈的,单表达到 1000 万条数据就达到了瓶颈,会影响查询效率, 需要进行水平拆分(分表) 进行优化。 例如:例子中的 orders、 orders_detail 都已经达到 600 万行数据,需要进行分表优化。 分表字段 以 orders 表为例,可以根据不同自字段进行分表。

单库分片实践

1.创建表

CREATE TABLE `city1` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`country` varchar(50),

`name` varchar(50),

`state` varchar(50),

PRIMARY KEY (`id`)

);

CREATE TABLE `city2` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`country` varchar(50),

`name` varchar(50),

`state` varchar(50),

PRIMARY KEY (`id`)

);

CREATE TABLE `city3` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`country` varchar(50),

`name` varchar(50),

`state` varchar(50),

PRIMARY KEY (`id`)

);

2.配置

select user()

3.验证

插入数据

insert into city(id, country, name, state) VALUES (1, '中国', '长沙','湖南');

insert into city(id, country, name, state) VALUES (2, '中国', '长沙','湖南');

insert into city(id, country, name, state) VALUES (3, '中国', '长沙','湖南');

查询数据

MySQL [TESTDB]> select * from city;

+----+---------+------+-------+

| id | country | name | state |

+----+---------+------+-------+

| 3 | ?? | ?? | ?? |

| 1 | ?? | ?? | ?? |

| 2 | ?? | ?? | ?? |

+----+---------+------+-------+

MySQL [TESTDB]> explain select * from city;

+-----------+-------------------------------+

| DATA_NODE | SQL |

+-----------+-------------------------------+

| node1 | SELECT * FROM city1 LIMIT 100 |

| node1 | SELECT * FROM city2 LIMIT 100 |

| node1 | SELECT * FROM city3 LIMIT 100 |

+-----------+-------------------------------+

总结

单库多表的分片策略如上展示,那么怎么才能把多库单表和单库多表结合起来呢?

下面再尝试一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值