600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > mycat 分表子查询_mysql分库分表之mycat中间件解决方案

mycat 分表子查询_mysql分库分表之mycat中间件解决方案

时间:2019-06-28 22:43:55

相关推荐

mycat 分表子查询_mysql分库分表之mycat中间件解决方案

项目运营期间随着时间的推移线上环境的数据越来越多,线上的sql跑的越来越慢,当数据表增加的千万级别数据,单纯的增加索引已经不能解决

线上的慢sql问题,这时,分表 ,分区,分库应运而生;小弟不才刚接触了分表,分库,现在分享下,有问题多多指教,见笑。

1 mysql分表分为水平切分,和垂直切分

垂直分割(并不常用)

就是将一个表按照字段来分,每张表保证有相同的主键就好。一般来说,将常用字段和大字段分表来放。

优势:比没有分表来说,提高了查询速度,降低了查询结果所用内存;

劣势:没有解决大量记录的问题,对于单表来说随着记录增多,性能还是下降很快;

2 水平分割(重要,实际应用中使用最多)

水平分割是企业最常用到的,水平拆分就是大表按照记录分为很多子表:

水平分的规则完全是自定义的,有以下几种参考设计:

1 hash、自增id取模:

对某个字段进行hash来确定创建几张表,并根据hash结果存入不同的表;

2 按时间

根据业务可以按照天、月、年来进行拆分;

3 按每个表的固定记录数

一般按照自增ID进行拆表,一张表的数据行到了指定的数量,就自动保存到下一张表中。比如规定一张表只能存1-1000个记录;

4 将老数据迁移到一张历史表

比如日志表,一般只查询3个月之内的数据,对于超过3个月的记录将之迁移到历史子表中;

分表时需要的设计:

查询时:要根据预定义规则查询不同的子表;

select/update/delete时:极有可能涉及多张表,必须在程序逻辑上的事务中都包括好所有的表。

表分的不好,对后期sql影响很大,所以分表也是一门学问;

1 分表可以在代码层级实现;

2 也可以用数据库中间件实现,现在流行的有 mycat和sharing-sphere,省去了我们很多时间;

本文主讲mycat中间件配置分表,分库;

首先mycat 的下载地址 /MyCATApache/Mycat-download 建议下载1.6-RELEASE 以上版本

mycat的安装教程本文省去,可自行百度

安装完成后,目录如下:

目录 说明

bin mycat命令,启动、重启、停止等

catlet catlet为Mycat的一个扩展功能

conf Mycat 配置信息,重点关注

lib Mycat引用的jar包,Mycat是java开发的

logs 日志文件,包括Mycat启动的日志和运行的日志。

conf先三个重要的文件

rule.xml schema.xml server.xml

MyCAT目前通过配置文件的方式来定义逻辑库和相关配置:

· MYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容;

· MYCAT_HOME/conf/rule.xml中定义分片规则;

· MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等。

首先server.xml配置 如果是数据库root用户配置密码以及schemas;

123456

TESTDB

如果是其他用户

user

TESTDB

true

然后配置schema.xml 文件

1 分库操作,像下图中

schema标签里面配置;

2 单库多表

配置rule.xml 规则

根据userid取模分表

4中的count代表分表的数量

这样mycat的配置基本算是完成了,然后启动命令

mycat.bat start

启动后可以通过如下命令查看mtcat运行状态

mycat.bat status

可以使用如下命令停止mycat服务

mycat.bat stop

这样mycat的环境基本部署完成了,下面就是启动项目

详情可以查看git 地址mycatdemo

是个springboot的mycatdemo项目中需要注意的是application.properties

中数据源

#配置数据源

#mycat的连接账号和密码

spring.datasource.druid.username=root

spring.datasource.druid.password=123456

#mycat的逻辑库 端口也是mycat的配置文件的schem名称

spring.datasource.druid.url=jdbc:mysql://localhost:8066/TESTDB

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。