MySQL-分库分表(Mycat)

目录

1.介绍​

概述

拆分策略

垂直拆分​

水平拆分​

实现技术​

shardingJDBC:

MyCat:

2.Mycat概述

环境准备​

分片配置

schema.xml​

server.xml

启动服务​

分片测试​

3.MyCat配置

schema.xml​

schema标签

datanode标签

​datahost标签​

rule.xml

server.xml

4.垂直拆分(分库)

场景

准备

配置

schema标签

server标签

测试

多表联查​

解决​

5.水平拆分​

6.分片规则

6.1范围分片​

6.2取模分片​

6.3一致性哈希

6.4枚举

6.5应用指定算法

6.6固定分片hash算法

6.7字符串哈希解析

6.8 按日期(天)分片

6.9 按日期(月)分片

7.MyCat管理与监督


1.介绍

概述

随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:

  1. IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。
  2. CPU瓶颈:排序、分组、连接查询、聚合统计等SOL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。

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

拆分策略

根据形式不同可以分为垂直拆分和水平拆分。

垂直相当于从中间切开,分库是把一个库中多个表拆成几份存储到不同数据库中,所以这些数据库中的库结构不一样。分表是把一个表中的各字段拆分到不同数据库,各表结构也不同。

水平就是物理切割,只是把各库中的部分数据存储到不同数据库,这些数据库结构一样。分表则把表中行部分存在不同数据库,表结构也相同。

垂直拆分

水平拆分

实现技术

shardingJDBC:

基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。需要自行编码配置实现,只支持java语言,性能较高。


MyCat:

数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及前者。

2.Mycat概述

Mycat是开源的、活跃的、基于java语言编写的MySOL数据库中间件。可以像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在。

环境准备

在节点主机中都新增db01的数据库,后续只对Mycat进行配置。

分片配置

schema.xml
  1. 逻辑库(Schema):逻辑库是 MyCat 中的一个虚拟数据库,它对应于 MySQL 中的 DATABASE逻辑库定义了包含的逻辑表和分片规则。

  2. 逻辑表(Table):逻辑表是 MyCat 中的一个虚拟表,它对应于物理数据库中的实际表。逻辑表定义了数据如何分布到不同的数据节点

  3. 数据节点(DataNode):定义了数据存储的具体位置。

  4. 数据主机(DataHost):定义了数据库的连接信息和读写分离策略。

  5. 分片规则(Rule):定义了如何将数据分布到不同的数据节点。

server.xml

readyOnly:只读权限,ture则表明该用户只有读权限。

启动服务

  • -h:指定 MySQL 服务器的主机名或 IP 地址。

  • -P:指定 MySQL 服务器的端口号。

  • -u:指定连接到 MySQL 服务器的用户名。

  • -p:指定连接到 MySQL 服务器的密码。

Mycat的登录格式与MySQL类似是由于,其通过以下方式实现与 MySQL 的兼容性:

SQL 解析

MyCat 内置了 SQL 解析器,能够解析和理解 MySQL 的 SQL 语法。它会拦截和解析客户端发送的 SQL 语句,然后根据配置的分片规则和路由策略,将 SQL 语句分发到相应的物理数据库节点。

协议兼容

MyCat 实现了 MySQL 的网络协议,使得客户端可以像连接普通 MySQL 数据库一样连接 MyCat。这包括支持 MySQL 的二进制协议和文本协议。

 透明代理

MyCat 作为一个透明代理,对客户端来说,它就像一个普通的 MySQL 数据库。客户端发送的 SQL 语句和数据请求都会被 MyCat 拦截和处理,然后转发到后端的物理数据库。返回的结果也会被 MyCat 处理后返回给客户端。

查看已存在schema.xml文件中配置的逻辑库与逻辑表。

分片测试

在MyCat中通过创建逻辑表该表结构会同步至节点数据库中,而往其逻辑表插入的数据会根据分片规则散落至各节点数据库。

3.MyCat配置

schema.xml

schema.xml作为MyCat中最重要的配置文件之一,涵盖了MyCat的逻辑库 、逻辑表 、分片规则、分片节点及数据源的配置。
主要包含以下三组标签:


schema标签

schema标签用于定义 MyCat实例中的逻辑库,一个MyCat实例中,可以有多个逻辑库,可以通过 schema 标签来划分不同的逻辑库。
MyCat中的逻辑库的概念 ,等同于MySQL中的database概念,需要操作某个逻辑库下的表时,也需要切换逻辑库(use xxx)。

schema标签<table>标签定义了MyCat中逻辑库schema下的逻辑表,所有需要拆分的表都需要在table标签中定义。


datanode标签


datahost标签

rule.xml

rule.xml中定义所有拆分表的规则,在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,它让分片过程可配置化。主要包含两类标签:tableRule、Function。

tableRule为分片规则,Function为具体配置

server.xml

server.xml配置文件包含了MyCat的系统配置信息,主要有两个重要的标签:system、user。

system为一些系统配置的信息。

user配置用户的信息以及其可以访问的权限

4.垂直拆分(分库)

场景

主数据库中包含4种分类的各表,决定拆分成3个表。

准备

配置

schema标签

table必须包含所有需要拆分的逻辑表。

这里讲逻辑表分为3部分,从上至下,商品相关表关联分片节点dn1,订单dn2,用户dn3.

dataNode配置了分片节点关联的节点主机。

server标签

将用户可访问的数据库名称修改为创建的逻辑库名称。

由于是逻辑表还需要在MyCat中执行对应的创建表语句,才能在节点主机看到物理表结构。

测试

多表联查

联查表在同一节点主机中,查询成功

联查表在不同节点主机中,查询失败

解决

将地址信息分片到所有节点,并将type=global声明为全局表。

5.水平拆分

将一张表中的数据分片到不同节点主机中,表结构相同,内容不同。

本质一样:schema配置逻辑库ITCAST中的逻辑表tb_log数据分片在dn4,dn5,dn6的分片节点中,rule指定分片规则。 dataNode配置节点关联的节点主机。

server配置用户访问权限

使用MyCat后所有DDL,DML语句在MyCat中执行。

6.分片规则

6.1范围分片

rule引用tableRule name中的分片规则,algorithm引用funcion name中的分片算法。

6.2取模分片

6.1与6.2不适用字段值为字符串。

6.3一致性哈希

所谓一致性哈希,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来数据的分区位置。

6.4枚举

通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,本规则适用于按照省份、性别、状态拆分数据等业务。

6.5应用指定算法

运行阶段由应用自主决定路由到那个分片,直接根据字符子串(必须是数字)计算分片号

6.6固定分片hash算法

该算法类似于十进制的求模运算,但是为二进制的操作,例如,取d的二进制低10位与 1111111111进行位&运算。

paritioncount位分片数,length为长度。 前两个分片节点长度256,第三个长度512.

6.7字符串哈希解析

截取字符串中的指定位置的子字符串,进行hash算法,算出分片。

6.8 按日期(天)分片

6.9 按日期(月)分片

7.MyCat管理与监督

MyCat对SQL语句解析解析,根据rule配置的分片规则对字段进行分片分析后决定路由给哪个节点。

MyCat对查询到的结果集再合并进行一系列处理后返回给客户端。

排序等操作都是在MyCat中执行,因为对部分数据处理无意义,采用整合后再处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉迷技术逻辑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值