MySQL架构优化及SQL优化

变更项目的整体架构是性能收益最大的方式。主要涉及两方面,一方面是从整个项目角度,引入一些中间件优化整体性能,另一方面是调整MySQL的部署架构,确保能承载更大的流量访问,提高数据层的整体吞吐。

1. 引入缓存中间件解决读压力

正常的项目业务中,读请求的数量远超写请求,所有的读请求都落入数据库处理,对MySQL会造成巨大的访问压力,甚至会由于流量过大,直接将数据库打到宕机,通常都会在应用程序和数据库之间架设一个缓存来解决这个问题,例如最常用的Redis。

在缓存Key设计合理的情况下,至少能够为MySQL分担70%以上的读压力,查询MySQL之前先查询一次Redis,Redis中有缓存数据则直接返回,没有数据时再将请求交给MySQL处理,从MySQL查询到数据后,再次将数据写入Redis,后续有相同请求再来读取数据时,直接从Redis返回数据即可。

2. 引入消息中间件解决写压力

项目中存在写操作比较频繁的时候,通过引入MQ消息中间件做削峰填谷。项目中核心的业务直接到MySQL执行落库操作,一些不重要的操作先发往MQ,MQ写入成功后直接将结果返回,后续在由消费线程去执行。

3. MySQL主从读写分离

当经过Redis、MQ后,必须要走MySQL执行的请求还是超出单机MySQL的承载范围,并且MySQL就是以单机的形式在线上运行,会出现频繁宕机的情况。

有三种MySQL架构的优化方案:主从架构,双主架构、分库分表架构。

主从复制,大多数中间件都会存在的一种高可用机制,MySQL中也存在这种架构,使用两台服务器来部署两个MySQL节点,一台为主机,另一台为从机,从节点会一直不断的从主节点上同步增量数据,当主节点发生故障时,从节点可以替换原本的主节点,以此来为客户端提供正常服务,

从节点仅作为一个备胎,难免有些浪费资源,可以在主从架构的模式下,略微做些调整,即实现读写分离,由于读操作并不会变更数据,对于读请求可以分发到从节点上处理,会引发数据变更的写请求,则分发到主节点处理,这样从而能够进一步提升MySQL的整体性能。

主节点的数据变更后,从节点也会基于bin-log日志去同步数据,但这种模式下会存在些许的数据不一致性,同步是需要时间的,向主节点修改一条数据后,立马去从节点中查询,这时不一定能够看到最新的数据,因为这时数据也许还未被同步过来。并没有太好的办法解决,项目对数据的实时性特别高就不要考虑主从架构。

4. MySQL双主双写热备

读写分离更适用于读大于写的业务。写大于读的业务从机分担的仅是系统的10~20%流量,所以双主双写(双柱热备)是最佳的选择。

两个MySQL节点都是主,同时都为从,两者之间相互同步数据,同时具备处理读/写请求的能力,出现读/写操作时,可由任意一个节点处理。

对于每张表的主键要处理好,如果表的主键是int自增类型的,要手动设置一下自增步长和起始值,比如这里有两个MySQL节点,将步长设置为2,起始值分别为1、2,能够确保主键的唯一性,设置后两个节点自增ID的序列如下:

    • 节点1:[1、3、5、7、9、11、13、15、17、19.....]
    • 节点2:[2、4、6、8、10、12、14、16、18、20.....]

当插入数据的SQL语句发往节点1时,会按照奇数序列自增ID,发往节点2时会以偶数序列自增ID,双方相互同步数据,最终两个MySQL节点都会具备完整的数据,因此后续的读请求,无论发往哪个节点都可以读到数据。

多主模式中的每个节点都会存储完整的数据,当数据增长达到硬件的最大容量时,就无法继续写入数据了,只能通过加大磁盘的形式进一步提高存储容量,但硬件也不可能无限制的加下去,而且由于多主是基于主从架构实现的,因为具备木桶效应,要加得所有节点一起加,否则另一个节点无法同步写入数据时,就会造成所有节点无法写入数据。

5. MySQL分库分表思想

根据业务属性的不同创建不同的数据库,不同的业务连接不同的数据库,各自之间数据分开存储,节点之间数据不会同步,以这种方式来部署MySQL,即提高了数据库的整体吞吐量和并发能力,同时也不存在之前的存储容量的木桶问题。实际上对项目做了分库分表之后,带来的问题、要解决的问题只会更多,只不过相较于分库分表带来的收益而言,解决问题的成本是值得的,所以才会使用分库分表技术。

 参考文档:MySQL调优篇:单机数据库如何在高并发场景下健步如飞?

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

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

相关文章

手把手教你玩转AD9361数字调制解调系列(四) ----纯PL逻辑实现QPSK信号的数字调制解调

因最近客户需求,用纯PL实现AD9361的数字信号调制解调,于是就把各种数字调制都在AD9361上都实现了一遍。 优点就是:既可以在zynq系列上配置9361,也可以在纯FPGA系列配置9361。并且理解起来比较简单!!&#…

推荐4款免费好用文本转语音工具

Edge文本转语音 Edge文本转语音功能主要通过Edge-TTS实现。Edge-TTS是由微软开发的文本转语音(TTS)Python库,利用微软Azure Cognitive Services的强大功能,能够将文本信息转换成流畅自然的语音输出。该库支持多种中文语音语色&…

PID控制与模糊PID控制的比较

一、PID控制器的设计 1.PID控制原理图: PID控制其结构框图如下图所示: 图1:PID控制器结构框图 2.PID控制器传递函数的一般表达式 PID控制器传递函数的一般表达形式为: 其中kp为比例增益;ki为积分增益;k…

《大语言模型的临床和外科应用:系统综述》

这篇题为《大语言模型的临床和外科应用:系统综述》的文章对大语言模型(LLM)目前在临床和外科环境中的应用情况进行了全面评估。 大语言模型(LLM)是一种先进的人工智能系统,可以理解和生成类似人类的文本。…

【YOLO8系列】(二)YOLOv8环境配置,手把手嘴对嘴保姆教学

目录 一. 准备环境 1.Anaconda下载 2.创建yolov8虚拟环境 3.pytorch安装 4.CUDA下载 5.CUDNN下载 二、yolov8模型下载 1.clone模型 2.pycharm配置 ①解释器配置 ②终端配置 3.安装必要库 4.下载训练模型 三、 环境验证 四、总结 YOLOv8 是 YOLO 系列最新的目标…

兼容性报错--调整字符集解决

文章目录 错误解决办法Unicode 字符集(两个字节来表示一个字符)多字节字符集(一个字节来表示一个字符)如何选择字符集char与wchar_t的区别LPCSTR与LPCWSTR的区别 错误 解决办法 切换字符集类型 Unicode 字符集(两个字节来表示一个字符) 优点: 支持更多的字符集…

Linux|背景 环境搭建

目录 一、简述Linux发展史 1.1计算机的诞生 1.2操作系统的诞生 1.3Linux操作系统开源 1.4Linux发行版本 二、搭建Linux环境 三、使用shell远程登入到Linux 一、简述Linux发展史 可能大家未听说过Linux,或者只知道它是一个搭配在计算机上的操作系统&#xff0…

Studio One直播声音怎么调 Studio One直播没有声音输出怎么办 studio one如何设置声音变好听

Studio One做为新生代音乐工作站,凭借更低的价格和完备的功能,获得了音乐人和直播行业工作者的青睐,尤其是对硬件声卡的适配支持更好,特别适合用来配合线上教学和电商带货。 一、Studio One直播声音怎么调 在Studio One进行直播时…

C基础day7

一、思维导图 二、课后练习 1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include<myhead.h> #define M 20 int main(int argc, const char *argv[]) {int sum_a0,sum_b0,sum_c0,sum_d0;char str[M];printf("please en…

鼠标点击触发-----以控制开灯、宝箱触发为例

开灯 当点击时触发开灯效果 &#xff08;不用设置触发器&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine;public class OpenLight : MonoBehaviour {public Transform light;bool isOpen;private void OnMouseDown(){if (!isOpe…

Hospital Management Startup 1.0 SQL 注入漏洞(CVE-2022-23366)

前言 CVE-2022-23366是一个影响HMS v1.0的SQL注入漏洞。该漏洞存在于patientlogin.php文件中&#xff0c;允许攻击者通过特定的SQL注入来获取或修改数据库中的敏感信息。 具体来说&#xff0c;攻击者可以通过向patientlogin.php发送恶意构造的SQL语句来绕过身份验证&#xff…

Joblib 是一个专注于高效计算和数据持久化的 Python 库

目录 01Joblib 是什么&#xff1f; 为什么选择 Joblib&#xff1f; 安装与配置 02Joblib 的基本用法 并行计算 数据持久化 03实战案例 项目简介 项目结构 依赖安装 应用代码 运行应用 …

FunAudioLLM SenseVoice语音转录与CosyVoice语音合成及语音克隆使用案例

参考: https://fun-audio-llm.github.io/ 1、SenseVoice语音转录 在线体验:https://modelscope.cn/studios/iic/CosyVoice-300M 参考:https://github.com/FunAudioLLM/SenseVoice 下载: pip install -U funasr使用: from funasr import AutoModelmodel_dir = "…

怎么将几首音乐合并在一起?这四种合并方法大家都在用!

怎么将几首音乐合并在一起&#xff1f;在音乐的海洋中遨游时&#xff0c;我们是否曾被音乐的海洋所淹没&#xff1f;在享受旋律的流转中&#xff0c;我们是否频繁地在不同的曲目间穿梭&#xff0c;仿佛迷失在无尽的音符之中&#xff1f;但音乐数量的繁多&#xff0c;不仅带来了…

单对以太网连接器多场景应用

单对以太网连接器应用场景概述 单对以太网&#xff08;Single Pair Ethernet&#xff0c;简称SPE&#xff09;作为一种新兴的以太网技术&#xff0c;以其独特的优势在多个领域得到了广泛的应用。SPE通过单对电缆进行数据传输&#xff0c;支持高速数据传输&#xff0c;同时还能…

pdf容量大小怎么改,pdf容量太大怎么变小

在数字化时代&#xff0c;pdf文件因其稳定性和跨平台兼容性而成为工作、学习和生活中不可或缺的文件格式。然而&#xff0c;随着文件内容的丰富&#xff0c;pdf文件的体积也日益增大&#xff0c;给存储和传输带来了不少困扰。本文将为你详细介绍多种实用的pdf文件压缩方法&…

基于STM32的智能加湿器

1.简介 基于STM32的加湿器发展前景非常乐观&#xff0c;这主要得益于其在技术、市场需求、应用场景以及政策支持等多方面的优势。STM32微控制器具备强大的处理能力和丰富的外设接口&#xff0c;能够实现精确的湿度监测和智能化控制。基于STM32的加湿器可以根据环境湿度自动调节…

光学传感器图像处理流程(一)

光学传感器图像处理流程&#xff08;一&#xff09; 1. 处理流程总览2. 详细处理流程2.1. 图像预处理2.1.1. 降噪处理2.1.2. 薄云处理2.1.3. 阴影处理 2.2. 辐射校正2.2.1. 辐射定标2.2.2. 大气校正2.2.3. 地形校正 2.3. 几何校正2.3.1. 图像配准2.3.2. 几何粗校正2.3.3. 几何精…

7.9总结

容易推出当移动i与j时等价于j-i-1个左右交换&#xff0c;且每次交换逆序数的奇偶改变&#xff08;无相同元素&#xff09;&#xff0c;假设有一个状态c&#xff0c;且a与b必须以等量的左右交换转移为c&#xff0c;则必须数量相同&#xff0c;元素相同&#xff08;使用异或解决&…