mysql——分库分表

1、介绍:

#分库分表
##介绍:
问题分析:
随着互联网及移动互联网的发展,应用系统的数据量也是指数式增长,若采用当数据库进行数据存储,存在以下性能瓶颈:
1、IO瓶颈:热点数据太多,数据缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。
2、CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。、

分库分表的中心思想都是将数据分散存储,
使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。


拆分策略:垂直拆分、水平拆分
垂直拆分:
1、垂直分库:
垂直分库:以表为依据,根据业务将不同表拆分到不同库中。
特点:
一、每个库的表结构都不一样
二、每个库的数据也不一样
三、所有库的并集是全量数据

2、垂直分表
垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。
特点:
一、每个表的结构都不一样
二、每个表的数据也不一样,一般通过一列(主键/外键)关联
三、所有表的并集是全量数据

水平拆分:
1、水平分库
水平分库:以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。
特点:
一、每个库的表结构都一样
二、每个库的数据都不一样
三、所有库的并集是全量数据

2、水平分表
水平分表:以字段为依据,按照一定策略,将一个表的数据拆分到多个表中。
特点:
一、每个表的表结构都一样
二、每个表的数据都不一样
三、所有表的并集是全量数据

实现技术:
shardingJDBC:基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。需要自行编码配置实现,只支持java语言,性能较高。
MyCat:数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及前者。

2、mycat介绍

MyCat概述
介绍:
MyCat是开源的、活跃的、基于java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在。
优势:
1、性能可靠稳定、
2、强大的技术团队
3、体系完善
4、社区活跃


安装:
Mycat是采用java语言开发的开源数据库中间件,支持Windows和Linux运行环境
准备三台服务器:master、slave1、slave2
master:安装软件:(JDK、Mycat)、MySQL           ( MyCat中间件服务器)、分片服务器
slave1:安装软件:MySQL                           分片服务器
slave2:安装软件:MySQL                           分片服务器

目录结构:
bin :存放可执行文件,用于启动停止mycat
conf:存放mycat的配置文件
lib:存放mycat的项目依赖包(jar)
logs:存发mycat的日志文件


需求:
由于tb_order表中的数据量很大,磁盘IO
分片配置(schema.xml)
配置(server.xml)


启动服务:
切换到Mycat的安装目录,执行如下指令,启动Mycat:
#启动
bin/mycat start
(查看是否启动成功可以在logs/wrapper.log查看)

也可以在cd /usr/lcoal/mycat/bin的目录下使用以下启动mycat:

./mycat console
#停止
bin/mycat stop

Mycat启动之后,占用端口号8066

在Mycat的目录下采用tail -f logs/wrapper.log可以查看输出的尾志:(successfully那里代表着你cd /usr/lcoal/mycat/conf目录下的server.xml和schema.xml配置成功。)


分片测试:
通过如下指令,就可以连接并登录MyCat。
mysql -h 192.168.200.210 -P 8066 -umycat -p123456;

然后就可以在Mycat中来创建表,并往表结构中插入数据,查看数据在MySQL中的分布情况。
use TESTDB;
drop table TESTDB;
CREATE TABLE TESTDB(id BIGINT(20) NOT NULL,
title VARCHAR(100) NOT NULL,
PRIMARY KEY(id))ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO TESTDB(id,title) VALUES(1,'goods1');
INSERT INTO TESTDB(id,title) VALUES(2,'goods2');
INSERT INTO TESTDB(id,title) VALUES(3,'goods3');
INSERT INTO TESTDB(id,title) VALUES(1000000,'goods1000000');
INSERT INTO TESTDB(id,title) VALUES(10000000,'goods1000000');
 

虚拟环境下:

3、mycat分片

(只有涉及到分表的时候才有rule)

#mycat分片
##垂直拆分
场景:
在业务系统中,涉及以下表结构,但是由于用户与订单每天都会产生大量的数据,单台服务器的数据存储及处理能力是有限的,可以对数据库表进行拆分。

测试:
在Mycat的命令行中,通过source指令导入表结构,以及对应的数据,查看数据分布情况
source /root/shopping-table.sql
source /root/shopping-insert.sql

查询用户的收件人及收件人地址信息(包含省、市、区)
select ua.user_id,ua.contact,p.province,c.city,r.area,ua.address from tb_user_address ua,tb_areas_city c,tb_areas_provinces p,tb_areas_region r where ua.province_id=p.provinceid and ua.city_id=c.cityid and ua.town_id=r.areaid;

查询每一笔订单及订单的收件地址信息(包含省、市、区)
SELECT order_id,payment,receiver,province,city,area FROM tb_order_master o,tb_areas_provinces p,tb_areas_city c,tb_areas_region r where o.receiver_province=p.provinceid AND o.receiver_city=c.cityid AND o.reveiver_region=r.areaid;


全局表配置:
对于省、市、区/县表tb_areas_provinces,tb_areas_city,tb_areas_region,是属于数据字典表,在多个业务模块中都可能会遇到,可以将其设置为全局表,利于业务操作。

虚拟环境下的全局配置:

在schema.xml中的配置

在server.xml尾部的配置:

查看表:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值