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中执行,因为对部分数据处理无意义,采用整合后再处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919579.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo 的 Java 项目间调用的完整示例

1. 项目结构假设项目分为三个模块&#xff1a;api&#xff1a;定义服务接口provider&#xff1a;服务提供者consumer&#xff1a;服务消费者2. 依赖配置在 pom.xml 中添加 Dubbo 和注册中心&#xff08;如 Nacos&#xff09;的依赖&#xff1a;<dependency><groupId&g…

Python进行中文分词

1. jieba库概述 jieba&#xff08;“结巴”&#xff09;是Python中最流行的中文分词库&#xff0c;采用基于前缀词典实现的高效分词算法&#xff0c;支持多种分词模式&#xff0c;是中文自然语言处理(NLP)的基础工具。 核心特性 精确模式&#xff1a;试图将句子最精确地切开&am…

JavaScript 性能优化实战:从原理到落地的完整指南

一、引言&#xff1a;为什么 JavaScript 性能优化至关重要&#xff1f;性能与用户体验的强关联数据支撑&#xff1a;加载延迟每增加 1 秒&#xff0c;用户转化率下降 7%&#xff08;来自 Google 研究&#xff09;核心痛点&#xff1a;现代 Web 应用中 JS 代码体积膨胀、运行时卡…

前端自动化部署

摘要&#xff1a;前端自动化部署是通过工具和流程自动化实现前端代码从开发完成到线上发布的全流程&#xff0c;减少人工操作、提高效率并降低出错风险。核心目标减少重复操作&#xff1a;自动化构建、测试、部署等步骤&#xff0c;替代手动上传服务器等低效方式。提升发布效率…

peewee中db.create_tables(tables, safe=True),safe=True作用

db.create_tables(tables, safeTrue) 中的 safeTrue 参数的作用是 防止在表已经存在的情况下引发错误。 具体来说&#xff1a; 当 safeTrue 时&#xff1a;Peewee 会在生成的 SQL 语句中加入 IF NOT EXISTS 子句&#xff08;例如&#xff1a;CREATE TABLE IF NOT EXISTS my_tab…

2025年计算机视觉与图像国际会议(ICCVI 2025)

2025年计算机视觉与图像国际会议| 视界创新&#xff0c;图领未来 2025年计算机视觉与图像国际会议&#xff08;ICCVI 2025&#xff09;将在中国东莞盛大召开。这不仅是一次汇聚全球顶尖科学家、工程师和学者的盛会&#xff0c;更是一个探索计算机视觉和图像处理领域前沿技术与未…

Temu美国站大规模扫号封店:虚假本土店遭批量封禁,如何规避?

2025年8月&#xff0c;Temu平台针对美国站再次掀起大规模扫号风暴。大量店铺因注册信息违规被判定为“高风险”&#xff0c;不仅店铺被冻结&#xff0c;商品也被下架并禁止补货。这一轮清扫&#xff0c;让不少依靠“资料店”快速起盘的卖家遭遇重创。事实上&#xff0c;Temu的风…

航空发动机叶片yolov8模型训练和转换(包含适配rk3588-pt转onnx转rknn)

前言&#xff1a; 1.训练在windows进行&#xff0c;因为电脑没有显卡&#xff0c;所以纯cpu训练&#xff0c;生成pt后转onnx 2.onnx转需要在Ubuntu虚拟机上运行 3.数据集标定快捷键 &#xff08;模型训练时不需要&#xff09;官方地址和下载pt权重&#xff1a;链接&#xff…

PyTorch如何修改模型(魔改)?/替换模型,一般除了注意输入输出一致,还有其他要修改的吗?

一、PyTorch如何修改模型&#xff08;魔改&#xff09;? 可以参考这个链接&#xff0c;看了一下还不错&#xff1a; PyTorch如何修改模型&#xff08;魔改&#xff09;_模型魔改-CSDN博客 二、替换模型&#xff0c;一般除了注意输入输出一致&#xff0c;还有其他要修改的吗?…

Pycharm Debug详解

Pycharm Debug详解看这个工具栏就是 PyCharm 调试器的“步进/断点”按钮区。常用按钮和作用&#xff08;从左到右一般是这些&#xff09;&#xff1a; Resume / 继续运行&#xff08;F9&#xff09;&#xff1a;从当前断点继续跑&#xff0c;直到下一个断点或程序结束。Step Ov…

将SSL配置迁移到Nacos的步骤

将SSL配置迁移到Nacos的步骤 要将SSL配置从本地application.yml迁移到Nacos配置中心&#xff0c;需要完成以下几个步骤&#xff1a; 1. 创建Nacos配置文件 在Nacos中创建一个新的配置文件&#xff08;例如application-ssl.yml&#xff09;&#xff0c;内容如下&#xff1a; ser…

HTTP请求参数类型及对应的后端注解

在Java后端开发中&#xff0c;HTTP请求的不同部分需要使用不同的注解来处理。以下是四种主要请求参数类型及其对应的Spring注解&#xff1a;1. 请求头(Headers)​​位置​​&#xff1a;HTTP请求的头部信息​​常用场景​​&#xff1a;认证信息(Token)、客户端信息、内容类型等…

服务器硬件电路设计之 SPI 问答(一):解密 SPI—— 从定义到核心特性

在服务器硬件电路设计中&#xff0c;SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是一种关键的通信总线。它由摩托罗拉公司开发&#xff0c;是全双工、同步串行通信总线&#xff0c;主要用于微控制器与外围设备之间的通信&#xff0c;凭借…

【2025CVPR-目标检测方向】OW-OVD:统一的开放世界和开放词汇对象检测

研究背景与动机​ ​问题​:传统目标检测器(封闭集)需预定义所有类别,无法适应动态开放环境。现有研究多独立解决开放词汇检测(OVD)或开放世界检测(OWOD),未结合两者优势: ​OVD​:通过文本-视觉嵌入匹配实现零样本泛化,但无法主动发现未知对象。 ​OWOD​:可主动…

基于Python的就业信息推荐系统 Python+Django+Vue.js

本文项目编号 25011 &#xff0c;文末自助获取源码 \color{red}{25011&#xff0c;文末自助获取源码} 25011&#xff0c;文末自助获取源码 目录 一、系统介绍二、系统录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状 六、核心代码6.1 查询数据6.2 新…

el-date-picker type=daterange 日期范围限制

html &#xff08;组件&#xff1a;element-ui&#xff09;重点&#xff1a; :picker-options"pickerOptions"<template><el-date-pickerv-model"form.dateRange"type"daterange" value-format"yyyy-MM-dd"range-separator&q…

【38页PPT】关于5G智慧园区整体解决方案(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/91694207 资料解读&#xff1a;《关于5G智慧园区整体解决方案》 详细资料请看本解读文章的最后内容。 智慧园区行业理解与建设目标 智慧园…

Kafka的ISR、OSR、AR详解

Kafka中的ISR、OSR和AR是副本管理机制的核心概念&#xff0c;它们共同保障了Kafka的高可用性和数据一致性。下面我将详细解释这些概念及其相互关系。 1. 基本概念 1.1 AR (Assigned Replicas) - 分配副本 定义&#xff1a;一个分区的所有副本集合称为AR&#xff0c;即Kafka为主…

第一阶段C#基础-13:索引器,接口,泛型

1_索引器&#xff08;1&#xff09;索引器是C#中一个强大而实用的特性&#xff0c;允许像访问数组一样访问类的成员&#xff08;2&#xff09;索引器&#xff1a;一种可以让我们使用索引来访问对象的一种方法&#xff0c;是一组get,set访问器&#xff0c;与属性类似&#xff0c…

SQL-leetcode— 2356. 每位教师所教授的科目种类的数量

2356. 每位教师所教授的科目种类的数量 表: Teacher ----------------- | Column Name | Type | ----------------- | teacher_id | int | | subject_id | int | | dept_id | int | ----------------- 在 SQL 中&#xff0c;(subject_id, dept_id) 是该表的主键。 该表…