MySQL体系结构

news/2024/4/29 2:22:24/文章来源:https://blog.csdn.net/Long_xu/article/details/127526071

MySQL体系结构

  • 初识MySQL
    • OLTP
    • OLAP
    • SQL
    • 数据库术语
  • MySQL体系结构
    • 连接池
    • 缓冲组件
  • 执行select语句的过程
  • 总结
  • 后言

初识MySQL

按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
MySQL是关系型数据库,数据存储再磁盘中。操作MySQL时需要落盘才会返回。

OLTP

OLTP,全称On-Line transaction processing,即翻译为联机事务处理。主要对数据库增删改查。
OLTP 主要用来记录某类业务事件的发生;数据会以增删改的方式在数据库中进行数据的更新处理操作,要求实时性高、稳定性强、确保数据及时更新成功。

OLAP

OLAP,全称On-Line Analytical Processing,即翻译为联机分析处理。主要对数据库查询。
当数据积累到一定的程度,需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取我们想要的信息,为公司做决策提供支持,这时候就是在做 OLAP 了。

SQL

结构化查询语言(Structured Query Language) 简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL 是关系数据库系统的标准语言。

关系型数据库包括:MySQL, SQL Server, Oracle, Sybase,postgreSQL 以及 MS Access等。

关系型数据库
MySQL
SQL Server
Oracle
Sybase
postgreSQL
Access

SQL 命令包括:DQL、DML、DDL、DCL以及TCL。

(1)DQL,全称Data Query Language,即数据查询语言。

select:从一个或者多个表中检索特定的记录。

(2)DML,全称Data Manipulate Language,即数据操作语言。

insert:插入记录。
update:更新记录。
delete:删除记录。

(3)DDL,全称Data Define Languge,即 数据定义语言。

create:创建一个新的表、表的视图、或者在数据库中的对象;
alter:修改现有的数据库对象,例如修改表的属性或者字段;
drop:删除表、数据库对象或者视图;

(4)DCL,全称Data Control Language,即 数据控制语言。

grant:授予用户权限;
revoke:收回用户权限;

(5)TCL,全称Transaction Control Language ,即 事务控制语言。

commit:事务提交;
rollback:事务回滚;

数据库术语

  1. 数据库:数据库是一些关联表的集合。
  2. 数据表:表是数据的矩阵。
  3. 列:一列包含相同类型的数据。
  4. 行:或者称为记录是一组相关的数据。
  5. 主键:主键是唯一的;一个数据表只能包含一个主键。
  6. 外键:外键用来关联两个表,来保证参照完整性;MyISAM 存储引擎本身并不支持外键,只起到注释作用;而 innoDB 完整支持外键。
  7. 复合键:或称组合键,将多个列作为一个索引键。
  8. 索引:用于快速访问数据表的数据;索引是对表中的一列或者多列的值进行排序的一种结构。

MySQL体系结构

mysql_arch
MySQL 由以下几部分组成:

  1. 连接池组件。管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求。
  2. 管理服务和工具组件。系统管理和控制工具,例如备份恢复、MySQL 复制、集群等。
  3. SQL 接口组件。将 SQL 语句解析生成相应对象;DML,DDL,存储过程,视
    图,触发器等。
  4. 查询分析器组件。将 SQL 对象交由解析器验证和解析,并生成语法树。
  5. 优化器组件。SQL 语句执行前使用查询优化器进行优化;选择执行效率最优的方案。
  6. 缓冲组件。是一块内存区域,用来弥补磁盘速度较慢对数据库性能的影
    响。
  7. 插件式存储引擎。
  8. 物理文件。

MySQL的连接者:不同语言的代码程序和 MySQL 的交互(SQL交互)。

连接池

连接池主要 管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求。

网络处理流程:主线程接收连接,接收连接交由连接池处理。

交由
主线程接收连接
连接池处理

主要处理方式:IO多路复用 select + 阻塞的 IO。
mysql_threads

每个连接,MySQL都会为每个客户端 fd 分配一个连接线程,专门负责处理该客户端的 sql 命令处理。

MySQL命令处理是多线程并发处理的,默认最大线程数是151个,超过151就无法操作了。另外,MySQL是采用短连接的方式,长时间没有操作MySQL的连接会被MySQL主动断开,回收资源。

缓冲组件

缓冲组件是一块内存区域,用来弥补磁盘速度较慢对数据库性能的影响。

在数据库进行读取页操作,首先将从磁盘读到的页存放在缓冲池中,下一次再读相同的页时,首先判断该页是否在缓冲池中,若在缓冲池命中,直接读取;否则读取磁盘中的页,说明该页被 LRU 淘汰了。缓冲池中 LRU 采用最近最少使用算法来进行管理。

缓冲池缓存的数据类型有:索引页、数据页、以及与存储引擎缓存相关的数据(比如innoDB 引擎:undo 页、插入缓冲、自适应 hash 索引、innoDB 相关锁信息、数据字典信息等)。

执行select语句的过程

执行一条select语句时,会经过:

  1. 连接器:主要作用是建立连接、管理连接及校验用户信息
  2. 查询缓冲:查询缓冲是以key-value的方式存储,key就是查询语句,value就是查询语句的查询结果集;如果命中直接返回。注意,MySQL 8.0已经删除了查询缓冲。
  3. 分析器:词法句法分析生成语法树。
  4. 优化器:指定执行计划,选择查询成本最小的计划。
  5. 执行器:根据执行计划,从存储引擎获取数据,并返回客户端。
select执行过程
no
yes
分析器
select ...
连接器
查询缓存
是否命中
返回结果 给客户端
优化器
执行器
从存储引擎获取数据

总结

  1. 了解SQL的命令术语DML、DDL、DCL、DQL、TCL。
  2. 数据库专业术语:数据库、数据表、主键、外键、复合键、行、列、索引。
  3. MySQL体系架构由 连接池、系统管理和工具组件、SQL接口、分析器、优化器、缓冲组件、插件式存储引擎、物理文件 几个部分组成。

后言

本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对c/c++linux系统提升感兴趣的读者,可以点击链接,详细查看详细的服务:C/C++服务器课程

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

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

相关文章

从位运算理解位图

位图是一种较难理解的数据结构&#xff0c;想了解位图&#xff0c;我需要先温习一下基础&#xff0c;复习下一些二进制的知识 位运算 1个字节8个二进制位 二进制每逢二进一&#xff0c;下面是二进制对应的十进制转换方式 二进制十进制0000 00012^010000 00102^120000 00112…

Shell编程案例

Shell编程案例 文章目录Shell编程案例熟悉shell编程的有关机制&#xff0c;如标准流。学习Linux环境变量设置文件及其内容/etc/profile/etc/bashrc/etc/environment~/.profile~/.bashrc熟悉编程有关基础命令技巧和规则sed掌握shell 程序执行的三种基本方式使用for循环语句,完成…

万字长文的CSS与JavaScript简易学习

近期学习web笔记&#xff0c;可供参考 目录 css: css导入方式&#xff1a; css选择器&#xff1a; javascript: javascript介绍&#xff1a; js引入方式&#xff1a; js书写语法&#xff1a; js变量&#xff1a; 5种原始类型&#xff1a; 运算符&#xff1a; JavaScr…

Spring Aop的学习(一):Spring Aop的简单入门

1. 什么是AOP AOP(Aspect Oriented Programming):面向切面编程,是OOP(面向对象编程)的一个延续,其和OOP一样,也是一种编程思想。不过AOP是一种横向开发模式。 2. AOP的作用及应用场景作用 AOP的主要作用就是减少代码量,提高代码的可重用性,有利于未来的可操作性与可维护性…

2022-2023-1 20221424《计算机基础与程序设计》第9周学习总结

2022-2023-1 20221424《计算机基础与程序设计》第9周学习总结 作业信息这个作业属于哪个课程 2022-2023-1-计算机基础与程序设计这个作业要求在哪里 2022-2023-1计算机基础与程序设计第一周作业这个作业的目标 操作系统责任,内存与进程管理,分时系统,CPU调度,文件、文件系统…

《JavaSE-第十五章》之文件(二)

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 刷题求职神器 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水…

neovim图标显示乱码,utf8字体显示乱码(Windows10和Centos安装nerd-fonts)

前言 作为一名想成为大神的菜鸟程序员&#xff0c;一个牛X的代码编辑环境是必不可少的&#xff0c;在这里我推荐neovim和emacs。我使用的是neovim&#xff0c;github上有neovim-from-scratch工程可以一步一步学习搭建&#xff0c;B站上也有相关视频可供学习&#xff0c;在这里…

升级python环境时gdal出现缺少proj的问题

gdal在做坐标转换时报出如此的错误。原系统的代码没有改变&#xff0c;为了更新sentinelhub包&#xff0c;将python环境由3.6升级至3.7。升级了python环境之后&#xff0c;所有相关的py包和第三方库重新进行安装。安装过程中基本没有遇到问题。但是在运行代码时gdal报出错误。 …

IDEA全局搜索快捷键方法

1、CtrlN 按名字搜索类 相当于eclipse的ctrlshiftR&#xff0c;输入类名可以定位到这个类文件&#xff0c;就像IDEA在其他的搜索部分表现一样&#xff0c;搜索类名也能对你所要搜索的内容多个部分进行匹配&#xff0c;而且如果能匹配的自己写的类&#xff0c;优先匹配自己写的类…

java实验报告4;

一、实验目的:【目的要求】 了解接口和抽象类的使用 熟悉类中成员的定义及权限的设定 掌握完整类的设计 【注意事项】 注意电源插座的用电安全&#xff1b; 遵守计算机的使用注意事项&#xff1b; 防范病毒。 二、使用工具 电脑 window系统 JDK环境 eclipse开发环境…

本博主二哈喇子!特此声明

免责声明 本博主二哈喇子&#xff01;为了避免各种纠纷&#xff0c;特做如下说明: 本博主一向尊重他人的知识产权&#xff0c;同时也注意保护自己的知识产权&#xff0c;因此建议您在进入本博客的各个页面前&#xff0c;请务必仔细阅读本声明。 一切网民以任何方式在进入本博客…

模拟登陆系统

1.问题 日常生活中我们会遇到许多需要密码来登陆账户的场景&#xff0c;如何使用Java来创建此类登陆代码呢&#xff1f; 2.方法 import java.util.Scanner; public static void main (String[] args) { Scanner sc new Scanner (System.in); int count 3; while(cou…

控制“恶意”代码,安全运行沙箱类技术崛起

据CNNIC的最新估算&#xff0c;截至10月31日&#xff0c;我国上网用户人数达到5800万&#xff0c;上网计算机数升至2300万&#xff0c;从七月份至今&#xff0c;在短短的四个月间分别增加了1220万和687万。 这预示着我国互联网在经过一段时间的发展低潮之后正在开始回暖。 但…

贪婪算法(Huffman编码)

如果一个算法分阶段的工作&#xff0c;并且在每一个阶段都认为所做的决定是最好的&#xff0c;而不考虑将来的后果&#xff0c;这样的算法就叫做贪婪算法。贪婪算法只考虑当前局部的最优解&#xff0c;而不去考虑全局的情况&#xff0c;如果最终得到的结果是全局最优的&#xf…

【pytest官方文档】解读- 开发可pip安装的第三方插件

在上一篇的 hooks 函数分享中,开发了一个本地插件示例,其实已经算是在编写插件了。今天继续跟着官方文档学习更多知识点。 一个插件包含一个或多个钩子函数,pytest 正是通过调用各种钩子组成的插件,实现了配置、搜集、运行和报告的所有方面的功能。 通常 pytes t中的插件有…

OS实战笔记(7)-- Linux同步机制

上一篇笔记中对x86平台上原子变量、关中断、自旋锁和信号量的原理做了复习&#xff0c;本笔记回顾一下Linux使用的几种常用的同步机制。 Linux上的原子变量 Linux上提供了一个atomic_t类型表示原子变量。32位和64位版本的结构体定义如下&#xff1a; typedef struct {int coun…

文件描述符0,1,2+lseek()+共享文件覆盖解决

1.文件描述符0&#xff0c;1&#xff0c;2 程序开始运行时&#xff0c;有三个文件被自动打开&#xff0c;打开时分别使用了这三个文件描述符依次打开的三个文件分别是 /dev/stdin&#xff0c;/dev/stdout&#xff0c;/dev/stderr /dev/stdin 标准输入文件 程序开始运行时&…

requests模块和openpyxl模块

第三方模块的下载和使用 1,第三方模块就是别人大神们已经写好的模块,功能特别强大。我们如果像使用第三方模块就先要进行下载。下载完成后 才可以在python中直接调用2.下载方式一:pip工具pip工具注意每个解释器都有pip工具 如果我们的电脑上有多个版本的解释器那么我们在使用…

模型交易平台--信用卡客户消费行为分析

业务问题&#xff1a; 据《中国银行卡产业发展蓝皮书&#xff08;2021&#xff09;》显示&#xff0c;截至2020年末&#xff0c;中国信用卡累计发卡量为11.3亿张&#xff0c;其中6个月内有使用记录的活卡为7.4亿张&#xff0c;有近4亿张信用卡处于“睡眠”状态。 睡眠信用卡…

【JUC】12.读写锁与StampedLock[完结]

文章目录1. 什么是读写锁2. 锁的演化历程3. 锁降级4. 锁降级的策略5. StampedLock简介6. StampedLock的特点7. StampedLock之传统读写8. StampedLock之乐观锁9. StampedLock缺点1. 什么是读写锁 读写锁是指ReentrantReadWriteLock类 该类能被多个读线程访问或者一个写线程访问…