MySQL体系架构解析

news2024/9/29 13:17:09

1.MySQL体系架构

1.1.MySQL的分支与变种

MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。

1.1.1.Drizzle

Drizzle是真正的MySQL分支,而且是完全开源的产品,而非只是个变种或增强版本。它并不与MySQL兼容不能简单地将MySQL后端替换为Drizzle。

Drizzle与MySQL有很大差别,进行了一些重大更改,甚至SQL语法的变化都非常大,设计目标之一是提供一种出色的解决方案来解决高可用性问题。在实现上,Drizzle清除了一些表现不佳和不必要的功能,将很多代码重写,对它们进行了优化,甚至将所用语言从C换成了C++。

此外,Drizzle另一个设计目标是能很好的适应具有大量内容的多核服务器、运行Linux的64位机器、云计算中使用的服务器、托管网站的服务器和每分钟接收数以万计点击率的服务器并且大幅度的削减服务器成本。

1.1.2.MariaDB

在Sun收购MySQL后,Monty Widenius,这位MySQL的创建者,因不认同MySQL开发流程而离开Sun。他成立了Monty程序公司,创立了MariaDB。MariaDB的目标是社区开发,Bug修复和许多的新特性实际上,可以将MariaDB视为MySQL的扩展集,它不仅提供MySQL提供的所有功能,还提供其他功能。MariaDB是原版MySQL的超集,因此已有的系统不需要任何修改就可以运行。

诸如Google,Facebook、维基百科等公司或者网站所使用了MariaDB。不过Monty公司不是以赢利为目的,而是由产品驱动的,这可能会带来问题,因为没有赢利的公司不一定能长久维持下去。

1.1.3.Percona Server

由领先的MySQL咨询公司Percona发布,Percona公司的口号就是“The Database Performance Experts”,Percona的创始人也就是《高性能MySQL》书的作者。

Percona Server是个与MySQL向后兼容的替代品,它尽可能不改变SQL语法、客户端/服务器协议和磁盘上的文件格式。任何运行在MySQL上的都可以运行在Percona Server上而不需要修改。切换到Percona Server只需要关闭MySQL和启动PerconaServer,不需要导出和重新导入数据。

Percona Server有三个主要的目标:透明,增加允许用户更紧密地查看服务器内部信息和行为的方法。比如慢查询日志中特别增加的详细信息;性能,Percona Server包含许多性能和可扩展性方面的改进,还加强了性能的可预测性和稳定性。其中主要集中于InnoDB;操作灵活性,Percona Server使操作人员和系统管理员在让MySQL作为架构的一部分而可靠并稳定运行时提供了很多便利。

一般来说,Percona Server中的许多特性会在后来的标准MySQL中出现。

国内公司阿里内部就运行了上千个Percona Server的实例。

1.2.MySQL的替代

1.2.1.Postgre SQL

PostgreSQL称自己是世界上最先进的开源数据库,同时也是个一专多长的全栈数据库。最初是1985年在加利福尼亚大学伯克利分校开发的。

PostgreSQL 的稳定性极强,在崩溃、断电之类的灾难场景下依然可以保证数据的正确;在高并发读写,负载逼近极限下,PostgreSQL的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,表现的非常稳定,而 MySQL 明显出现一个波峰后下滑;

PostgreSQL多年来在GIS(地理信息)领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PostgreSQL有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多。所以总的来说,PostgreSQL更学术化一些,在绝对需要可靠性和数据完整性的时候,PostgreSQL是更好的选择。但是从商业支持、文档资料、易用性,第三方支持来说,MySQL无疑更好些。

1.2.2.SQLite

SQLite是世界上部署最广泛的数据库引擎,为物联网(IoT)下的数据库首选,并且是手机,PDA,甚至MP3播放器的下的首选。SQLite代码占用空间小,并且不需要数据库管理员的维护。SQLite没有单独的服务器进程,提供的事务也基本符合ACID。当然,简单也就意味着功能和性能受限。

2.MySql基础

2.1.MySQL体系架构

可以看出MySQL是由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。

连接池

由于每次建立建立需要消耗很多时间,连接池的作用就是将这些连接缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。

管理工具和服务

系统管理和控制工具,例如备份恢复、Mysql复制、集群等

SQL接口

接受用户的SQL命令,并且返回用户需要查询的结果。比如select ... from就是调用SQL接口

解析器

SQL命令传递到解析器的时候会被解析器验证和解析。解析器主要功能:1、将SQL语句分解成数据结构,后续步骤的传递和处理就是基于这个结构的。2、将SQL语句分解成数据结构,后续步骤的传递和处理就是基于这个结构的。

优化器

查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。

缓存器

查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。

存储引擎(后面会细讲)

文件系统(后面会细讲)

2.1.1.连接层

当MySQL启动(MySQL服务器就是一个进程),等待客户端连接,每一个客户端连接请求,服务器进程会创建一个线程专门处理与这个客户端的交互。当客户端与该服务器断开之后,不会立即撤销线程,只会把他缓存起来等待下一个客户端请求连接的时候,将其分配给该客户端。每个线程独立,拥有各自的内存处理空间。

以下命令可以查看最大的连接数:

show VARIABLES like '%max_connections%' 

连接到服务器,服务器需要对其进行验证,也就是用户名、IP、密码验证,一旦连接成功,还要验证是否具有执行某个特定查询的权限(例如,是否允许客户端对某个数据库某个表的某个操作)

2.1.2.Server层(SQL处理层)

这一层主要功能有:SQL语句的解析、优化,缓存的查询,MySQL内置函数的实现,跨存储引擎功能(所谓跨存储引擎就是说每个引擎都需提供的功能(引擎需对外提供接口)),例如:存储过程、触发器、视图等。

当然作为一个SQL的执行流程如下:

1.如果是查询语句(select语句),首先会查询缓存是否已有相应结果,有则返回结果,无则进行下一步(如果不是查询语句,同样调到下一步)

2.解析查询,创建一个内部数据结构(解析树),这个解析树主要用来SQL语句的语义与语法解析;

3.优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。这一阶段用户是可以查询的,查询服务器优化器是如何进行优化的,便于用户重构查询和修改相关配置,达到最优化。这一阶段还涉及到存储引擎,优化器会询问存储引擎,比如某个操作的开销信息、是否对特定索引有查询优化等。

2.1.2.1.缓存(了解即可)
show variables like '%query_cache_type%'   -- 默认不开启
​
show variables like '%query_cache_size%'  --默认值1M
​
SET GLOBAL query_cache_type = 1; --会报错

query_cache_type只能配置在my.cnf文件中!

缓存在生产环境建议不开启

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

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

相关文章

RockyLinux9上安装Nacos2.3.0(非Docker安装)

RockyLinux9上安装Nacos2.3.0 说明什么是Nacos下载并安装创建一个nacos-conf数据库修改application.properties文件 启动如果在项目中使用需要注意访问网址查看是否成功 开启访问鉴权 说明 本文采用的是:安装包安装,非Docker安装,系统采用的R…

雷池WAF动态防护功能初体验

一、 介绍 大名鼎鼎的雷池WAF最近新上了个名为 动态防护 的功能 所谓动态防护,是在用户浏览到的网页内容不变的情况下,将网页赋予动态特性,即使是静态页面,也会具有动态的随机性。 说白了就是给你网站的 html 和 js 代码加上加密…

Linux下为什么ls直接就可以运行,而你的程序要写./dir1/dir2/bin/bwa才可以

习惯了Windows电脑下的所见即所得,找到程序或文件双击即可运行或打开;于是我们被惯得以为电脑会像人一样聪明,给他一个名字就可以运行程序或打开文件;于是在命令行下或程序里不断碰壁,为啥这个命令不运行了呢&#xff…

2024年的设计理念革新:快速获取设计趋势的资源集合!

随着2024年第三季度开始,今年的设计趋势也逐渐出现。与2023 年设计相比,趋势变化空间不大,大部分是在 2023 年度设计趋势的延伸和发展。即使趋势不会一直改变,了解趋势对设计师来说仍然非常重要。接下来,本文将与你分享…

lora训练调参

Stable Diffusion 训练指南 (LyCORIS) | Coding HuskyStable Diffusion 文字生成图片的教程已经很多了。这篇文章是讲解如何用 Kohya Trainer 在 Google Colab 上训练一个 LyCORIS 模型。在读之前希望你已经至少玩过 Stable Diffusion。https://ericfu.me/stable-diffusion-fin…

阿里云通义千问开源两款语音基座模型分别是SenseVoice和CosyVoice

阿里巴巴近期发布了开源语音大模型项目FunAudioLLM,该项目包含了两个核心模型:SenseVoice和CosyVoice。可以精准多语言识别并且进行语音克隆。 SenseVoice:精准多语言识别与情感辨识 SenseVoice主要致力于高精度多语言语音识别、情感辨识和…

【搭建Nacos服务】centos7 docker从0搭建Nacos服务

前言 本次搭建基于阿里云服务器系统为(CentOS7 Linux)、Nacos(2.0.3)、Docker version 26.1.4 本次搭建基于一个新的云服务器 安装java yum install -y java-1.8.0-openjdk.x86_64安装驱动以及gcc等前置需要的命令 yum install …

暑期旅游季必备,用这款客服神器应对爆棚的客流咨询

解决暑期旅游客流高峰问题 暑期是旅游高峰季节,客流量剧增,客户咨询纷至沓来。在这个时候,如何高效处理客户的咨询成为每家旅游机构和景点不可忽视的挑战。 聊天宝快捷回复助手是一款强大的工具,可帮助企业在客流高峰期快速回复客…

使用耳机壳UV树脂制作私模定制耳塞的大小和形状对音质有影响吗?

使用耳机壳UV树脂制作私模定制耳塞的大小和形状对音质有影响吗? 使用耳机壳UV树脂制作私模定制耳塞的大小和形状对音质有影响。私模定制耳塞是根据用户的耳型定制的,因此其大小和形状与用户的耳朵形状相匹配,能够减少漏音和外部噪音的干扰&a…

基于SpringBoot构造超简易QQ邮件服务发送(分离-图解-新手)

目录 获取QQ 授权码 SpringBoot构建 依赖 Yaml配置 服务编写 测试 获取QQ 授权码 https://mail.qq.com/ 接着后就会有对应的密钥了 SpringBoot构建 依赖 这里的建议是 2.0系列的Springboot版本用低一点的邮件依赖 <!-- 电子邮件 --> <dependency>&…

pwn误区的buffer

注意栈顶是闭合的&#xff0c;栈底才是打开的 栈图&#xff1a; |--------------------------| | | | | buffer溢出的时候&#xff0c;是从栈底到栈顶方向

apache python使用

修改httpd.conf文件。 AddHandler cgi-script .cgi .py 代码 #!自己的python.exe #-*- coding:UTF-8 -*- print ("Content-type:text/html") print () print (<html>) print (<head>) print (<meta charset"gb2312">) print (<tit…

房地产销售管理能力提升之资产复用、优化管理

提升房地产销售管理能力&#xff0c;从哪些场景入手&#xff1f;惟客数据认为可以从放大流量、提升优化、资产复用、优化管理四方面入手。 本篇继续拆解如何做好“资产复用、优化管理”&#xff1a; 一、资产复用 首先&#xff0c;通过全渠道客户数据的整合与挖掘&#xff0c;…

案列:Nginx+Tomcat负载均衡、动静分离群集

一、案列&#xff1a;部署Tomcat&#xff08;在192.168.10.102和192.168.10.103&#xff09; 1.关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2.安装java环境 [rootlocalhost ~]# yum -y install java [rootlocalhost ~]# jav…

微软发布E2 TTS: 一种简单但效果优秀的文本转语音技术

本文介绍了一种名为“Embarrassingly Easy Text-to-Speech&#xff08;E2 TTS&#xff09;”的文本转语音系统。 该系统通过将输入文本转换为填充标记字符序列&#xff0c;并基于音频填充值任务训练流匹配基mel频谱生成器&#xff0c;实现了人类水平的自然度和最先进的说话人相…

大模型应用中什么是SFT(监督微调)?

大模型应用中什么是SFT&#xff08;监督微调&#xff09;&#xff1f; 一、SFT的基本概念 监督微调&#xff08;Supervised Fine-Tuning, SFT&#xff09;是对已经预训练的模型进行特定任务的训练&#xff0c;以提高其在该任务上的表现。预训练模型通常在大量通用数据上进行训…

APP项目开发的费用估计

APP项目的开发方式主要有以下几种&#xff0c;需要注意的是&#xff0c;以下只是一些估算值&#xff0c;实际的开发成本可能会有所不同。建议您在开发APP项目之前&#xff0c;先咨询专业的开发公司&#xff0c;获取详细的报价。北京木奇移动技术有限公司&#xff0c;专业的软件…

QT开发积累——qt中的注释和多行注释的几种方式,函数方法注释生成

目录 引出qt中的注释和多行注释方法的注释生成 总结日积月累&#xff0c;开发集锦方法参数加const和不加const的区别方法加static和不加static的区别Qt遍历list提高效率显示函数的调用使用&与不使用&qt方法的参数中使用&与不使用&除法的一个坑 项目创建相关新建…

爬虫-豆瓣读书排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析&#xff1a; 导入requests库调用了requests库中的…

人生苦短,我用Python+Docker

今天用一个简单的例子&#xff0c;介绍下如何使用Docker进行Python部署。 前期准备 本地需要有Python环境&#xff1b; 一个Linux的服务器并已经装好Docker &#xff1b; 能把代码上传到服务端的工具。 本文的本地环境是Win10Python3.12&#xff0c;服务器使用Ubuntu的云服…