最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL的邏輯架構(gòu)及工作全流程

 更新時(shí)間:2023年03月12日 16:15:55   作者:z_ryan  
這篇文章主要介紹了MySQL的邏輯架構(gòu)及工作全流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MySql并不完美,但是卻足夠靈活,能夠適應(yīng)高要求的環(huán)境。同時(shí),MySql既可以嵌入到應(yīng)用程序中,也可以支持?jǐn)?shù)據(jù)倉(cāng)庫(kù)、內(nèi)容索引和部署軟件、高可用的冗余系統(tǒng)、在線事務(wù)處理系統(tǒng)等各種應(yīng)用類型?! ?/p>

為了更心如的理解MySql服務(wù)器,我們需要理解MySql各部件之間如何協(xié)同工作。需要我們?nèi)ダ斫馑倪壿嫾軜?gòu)。

下面我們就來(lái)介紹一下MySql的邏輯架構(gòu):

MySQL的邏輯架構(gòu)

MySQL的最重要、最與眾不同的特性就是它的存儲(chǔ)引擎架構(gòu),這種架構(gòu)將查詢處理以及其他系統(tǒng)任務(wù)和數(shù)據(jù)的存儲(chǔ)/提取相分離。

所帶來(lái)的好處就是可以在使用時(shí)根據(jù)性能、特性,以及其他需求來(lái)選擇數(shù)據(jù)存儲(chǔ)的方式?! ?/p>

下圖就是MySQL的邏輯架構(gòu)圖:

  

MySQL架構(gòu)總共三層,在上圖中以虛線作為劃分?! ?/p>

首先,最上層的服務(wù)并不是MySQL獨(dú)有的,大多數(shù)給予網(wǎng)絡(luò)的客戶端/服務(wù)器的工具或者服務(wù)都有類似的架構(gòu)。比如:連接處理、授權(quán)認(rèn)證、安全等?!   ?/p>

第二層的架構(gòu)包括大多數(shù)的MySQL的核心服務(wù)。包括:查詢解析、分析、優(yōu)化、緩存以及所有的內(nèi)置函數(shù)(例如:日期、時(shí)間、數(shù)學(xué)和加密函數(shù))。同時(shí),所有的跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn):存儲(chǔ)過(guò)程、觸發(fā)器、視圖等。

第三層包含了存儲(chǔ)引擎。存儲(chǔ)引擎負(fù)責(zé)MySQL中數(shù)據(jù)的存儲(chǔ)和提取。服務(wù)器通過(guò)API和存儲(chǔ)引擎進(jìn)行通信。這些接口屏蔽了不同存儲(chǔ)引擎之間的差異,使得這些差異對(duì)上層的查詢過(guò)程透明化。存儲(chǔ)引擎API包含十幾個(gè)底層函數(shù),用于執(zhí)行“開(kāi)始一個(gè)事務(wù)”等操作。但存儲(chǔ)引擎一般不會(huì)去解析SQL(InnoDB會(huì)解析外鍵定義,因?yàn)槠浔旧頉](méi)有實(shí)現(xiàn)該功能),不同存儲(chǔ)引擎之間也不會(huì)相互通信,而只是簡(jiǎn)單的響應(yīng)上層的服務(wù)器請(qǐng)求。

更加詳細(xì)的MySQL系統(tǒng)架構(gòu)圖

看完上圖后,大家是不是覺(jué)得MySQL的系統(tǒng)架構(gòu)挺簡(jiǎn)單的?其實(shí)不然。

上圖只是MySQL系統(tǒng)架構(gòu)的大的模塊圖,其實(shí)每一層的結(jié)構(gòu)都相當(dāng)復(fù)雜,下圖就是詳細(xì)模塊圖:

  

首先,我們對(duì)該圖中的各個(gè)模塊做一簡(jiǎn)單介紹: 

1、Connectors  

指的是不同語(yǔ)言中與SQL的交互?! ?/p>

2、Connection Pool  

管理緩沖用戶連接,線程處理等需要緩存的需求。負(fù)責(zé)監(jiān)聽(tīng)對(duì) MySQL Server 的各種請(qǐng)求,接收連接請(qǐng)求,轉(zhuǎn)發(fā)所有連接請(qǐng)求到線程管理模塊。每一個(gè)連接上 MySQL Server 的客戶端請(qǐng)求都會(huì)被分配(或創(chuàng)建)一個(gè)連接線程為其單獨(dú)服務(wù)。而連接線程的主要工作就是負(fù)責(zé) MySQL Server 與客戶端的通信,接受客戶端的命令請(qǐng)求,傳遞 Server 端的結(jié)果信息等。線程管理模塊則負(fù)責(zé)管理維護(hù)這些連接線程。包括線程的創(chuàng)建,線程的 cache 等。

3、 Management Serveices & Utilities  

系統(tǒng)管理和控制工具。

4、 SQL Interface  

接受用戶的SQL命令,并且返回用戶需要查詢的結(jié)果?! ?/p>

5、 Parser  

SQL命令傳遞到解析器的時(shí)候會(huì)被解析器驗(yàn)證和解析。解析器是由Lex和YACC實(shí)現(xiàn)的,是一個(gè)很長(zhǎng)的腳本。在 MySQL中我們習(xí)慣將所有 Client 端發(fā)送給 Server 端的命令都稱為 query ,在 MySQL Server 里面,連接線程接收到客戶端的一個(gè) Query 后,會(huì)直接將該 query 傳遞給專門負(fù)責(zé)將各種 Query 進(jìn)行分類然后轉(zhuǎn)發(fā)給各個(gè)對(duì)應(yīng)的處理模塊。 

主要功能:  

a 、 將SQL語(yǔ)句進(jìn)行語(yǔ)義和語(yǔ)法的分析,分解成數(shù)據(jù)結(jié)構(gòu),然后按照不同的操作類型進(jìn)行分類,然后做出針對(duì)性的轉(zhuǎn)發(fā)到后續(xù)步驟,以后SQL語(yǔ)句的傳遞和處理就是基于這個(gè)結(jié)構(gòu)的;  

b、 如果在分解構(gòu)成中遇到錯(cuò)誤,那么就說(shuō)明這個(gè)sql語(yǔ)句是不合理的。

6、 Optimizer  

查詢優(yōu)化器:SQL語(yǔ)句在查詢之前會(huì)使用查詢優(yōu)化器對(duì)查詢進(jìn)行優(yōu)化。就是優(yōu)化客戶端請(qǐng)求query,根據(jù)客戶端請(qǐng)求的 query 語(yǔ)句,和數(shù)據(jù)庫(kù)中的一些統(tǒng)計(jì)信息,在一系列算法的基礎(chǔ)上進(jìn)行分析,得出一個(gè)最優(yōu)的策略,告訴后面的程序如何取得這個(gè) query 語(yǔ)句的結(jié)果?! ?/p>

使用的是“選取-投影-聯(lián)接”策略進(jìn)行查詢:

用一個(gè)例子就可以理解: select uid,name from user where gender = 1;

這個(gè)select 查詢先根據(jù)where 語(yǔ)句進(jìn)行選取,而不是先將表全部查詢出來(lái)以后再進(jìn)行g(shù)ender過(guò)濾;然后根據(jù)uid和name進(jìn)行屬性投影,而不是將屬性全部取出以后再進(jìn)行過(guò)濾。最后將這兩個(gè)查詢條件聯(lián)接起來(lái)生成最終查詢結(jié)果。

7 、Cache和Buffer  

查詢緩存:主要功能是將客戶端提交 給MySQL 的 Select 類 query 請(qǐng)求的返回結(jié)果集 cache 到內(nèi)存中,與該 query 的一個(gè) hash 值 做一個(gè)對(duì)應(yīng)。該 query 所取數(shù)據(jù)的基表發(fā)生任何數(shù)據(jù)的變化之后, MySQL 會(huì)自動(dòng)使該 query 的Cache 失效。在讀寫(xiě)比例非常高的應(yīng)用系統(tǒng)中, Query Cache 對(duì)性能的提高是非常顯著的。當(dāng)然它對(duì)內(nèi)存的消耗也是非常大的?! ?/p>

如果查詢緩存有命中的查詢結(jié)果,查詢語(yǔ)句就可以直接去查詢緩存中取數(shù)據(jù)。這個(gè)緩存機(jī)制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,權(quán)限緩存等。

8 、存儲(chǔ)引擎接口  

MySQL區(qū)別于其他數(shù)據(jù)庫(kù)的最重要的特點(diǎn)就是其插件式的表存儲(chǔ)引擎。MySQL插件式的存儲(chǔ)引擎架構(gòu)提供了一系列標(biāo)準(zhǔn)的管理和服務(wù)支持,這些標(biāo)準(zhǔn)與存儲(chǔ)引擎本身無(wú)關(guān),可能是每個(gè)數(shù)據(jù)庫(kù)系統(tǒng)本身都必需的,如SQL分析器和優(yōu)化器等,而存儲(chǔ)引擎是底層物理結(jié)構(gòu)的實(shí)現(xiàn),每個(gè)存儲(chǔ)引擎開(kāi)發(fā)者都可以按照自己的意愿來(lái)進(jìn)行開(kāi)發(fā)。 

注意:存儲(chǔ)引擎是基于表的,而不是數(shù)據(jù)庫(kù)。

數(shù)據(jù)庫(kù)的工作流程

相信通過(guò)上述的介紹,大家對(duì)MySQL的邏輯架構(gòu)已經(jīng)有了一定的了解,下面我們下來(lái)介紹一下數(shù)據(jù)庫(kù)具體的工作流程,先看一張圖:

    

在這里,我從數(shù)據(jù)庫(kù)架構(gòu)的三個(gè)層面分別介紹數(shù)據(jù)庫(kù)的工作流程: 

最上層:客戶端連接  

1、連接處理:客戶端同數(shù)據(jù)庫(kù)服務(wù)層建立TCP連接,連接管理模塊會(huì)建立連接,并請(qǐng)求一個(gè)連接線程。如果連接池中有空閑的連接線程,則分配給這個(gè)連接,如果沒(méi)有,在沒(méi)有超過(guò)最大連接數(shù)的情況下,創(chuàng)建新的連接線程負(fù)責(zé)這個(gè)客戶端?!   ?/p>

2、授權(quán)認(rèn)證:在真正的操作之前,還需要調(diào)用用戶模塊進(jìn)行授權(quán)檢查,來(lái)驗(yàn)證用戶是否有權(quán)限。通過(guò)后,方才提供服務(wù),連接線程開(kāi)始接收并處理來(lái)自客戶端的SQL語(yǔ)句。

第二層:核心服務(wù)  

1、連接線程接收到SQL語(yǔ)句之后,將語(yǔ)句交給SQL語(yǔ)句解析模塊進(jìn)行語(yǔ)法分析和語(yǔ)義分析。

2、如果是一個(gè)查詢語(yǔ)句,則可以先看查詢緩存中是否有結(jié)果,如果有結(jié)果可以直接返回給客戶端。

3、如果查詢緩存中沒(méi)有結(jié)果,就需要真的查詢數(shù)據(jù)庫(kù)引擎層了,于是發(fā)給SQL優(yōu)化器,進(jìn)行查詢的優(yōu)化。如果是表變更,則分別交給insert、update、delete、create、alter處理模塊進(jìn)行處理。

第三層:數(shù)據(jù)庫(kù)引擎層  

1、打開(kāi)表,如果需要的話獲取相應(yīng)的鎖?!   ?/p>

2、先查詢緩存頁(yè)中有沒(méi)有相應(yīng)的數(shù)據(jù),如果有則可以直接返回,如果沒(méi)有就要從磁盤上去讀取。

3、當(dāng)在磁盤中找到相應(yīng)的數(shù)據(jù)之后,則會(huì)加載到緩存中來(lái),從而使得后面的查詢更加高效,由于內(nèi)存有限,多采用變通的LRU表來(lái)管理緩存頁(yè),保證緩存的都是經(jīng)常訪問(wèn)的數(shù)據(jù)。

最后,獲取數(shù)據(jù)后返回給客戶端,關(guān)閉連接,釋放連接線程。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • ubuntu 16.04配置MySQL主從同步的配置方法

    ubuntu 16.04配置MySQL主從同步的配置方法

    這篇文章主要介紹了ubuntu 16.04配置MySQL主從同步的配置方法,需要的朋友可以參考下
    2018-03-03
  • mysql-8.0.15-winx64安裝與修改密碼方式

    mysql-8.0.15-winx64安裝與修改密碼方式

    本文提供了詳細(xì)的MySQL安裝步驟,包括下載、安裝、配置環(huán)境變量、啟動(dòng)服務(wù)和初始化數(shù)據(jù)庫(kù),首先,從MySQL官網(wǎng)下載壓縮包并解壓,其次,將bin目錄添加到系統(tǒng)PATH中,接著,創(chuàng)建my.ini文件進(jìn)行配置,并正確放置于指定目錄,通過(guò)CMD以管理員身份執(zhí)行安裝和初始化命令
    2024-10-10
  • mysql用戶管理操作實(shí)例分析

    mysql用戶管理操作實(shí)例分析

    這篇文章主要介紹了mysql用戶管理操作,結(jié)合實(shí)例形式分析了mysql用戶管理查看、創(chuàng)建、修改、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • MySQL密碼忘了怎么辦?MySQL重置root密碼方法

    MySQL密碼忘了怎么辦?MySQL重置root密碼方法

    本文主要介紹Windows和Linux系統(tǒng)下忘記密碼重置root密碼的方法,需要的朋友可以參考下。
    2016-05-05
  • mysql優(yōu)化的重要參數(shù) key_buffer_size table_cache

    mysql優(yōu)化的重要參數(shù) key_buffer_size table_cache

    MySQL服務(wù)器端的參數(shù)有很多,但是對(duì)于大多數(shù)初學(xué)者來(lái)說(shuō),眾多的參數(shù)往往使得我們不知所措,但是哪些參數(shù)是需要我們調(diào)整的,哪些對(duì)服務(wù)器的性能影響最大呢
    2016-05-05
  • mysql字符串拼接并設(shè)置null值的實(shí)例方法

    mysql字符串拼接并設(shè)置null值的實(shí)例方法

    在本文中小編給大家整理的是關(guān)于mysql 字符串拼接+設(shè)置null值的實(shí)例內(nèi)容以及具體方法,需要的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • MySQL可直接使用的查詢表的列信息(實(shí)現(xiàn)方案)

    MySQL可直接使用的查詢表的列信息(實(shí)現(xiàn)方案)

    本文介紹了如何使用SQL快速將下劃線命名的表字段轉(zhuǎn)換為駝峰命名格式,包括確定下劃線位置、找到第一個(gè)字符、截取并拼接字符串等步驟,通過(guò)使用LOCATE、CONCAT、UCASE和LOWER等函數(shù),可以實(shí)現(xiàn)高效的字段命名轉(zhuǎn)換,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Navicat連接mysql報(bào)錯(cuò)2003(10060)的解決方法

    Navicat連接mysql報(bào)錯(cuò)2003(10060)的解決方法

    本來(lái)好好的navicat連接數(shù)據(jù)庫(kù),突然間今天就打不開(kāi)數(shù)據(jù)庫(kù)了,下面這篇文章主要給大家介紹了關(guān)于Navicat連接mysql報(bào)錯(cuò)2003(10060)的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • MySQL更新刪除操作update和delete使用詳解(小白慎用)

    MySQL更新刪除操作update和delete使用詳解(小白慎用)

    這篇文章主要為大家介紹了MySQL的更新刪除操作update和delete使用但是一定要慎用啊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 初步介紹MySQL中的集合操作

    初步介紹MySQL中的集合操作

    這篇文章主要介紹了初步的MySQL中的集合操作,即UNION DISTINCT和UNION ALL兩個(gè)命令,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

秦皇岛市| 昌都县| 兰溪市| 彭水| 敦化市| 梨树县| 贡嘎县| 拉孜县| 岳池县| 吉木乃县| 贵南县| 东乌珠穆沁旗| 庄河市| 临沧市| 青神县| 新丰县| 平定县| 翁牛特旗| 建阳市| 杂多县| 库车县| 通州区| 鄯善县| 康定县| 资源县| 南江县| 容城县| 乌苏市| 青神县| 正宁县| 广州市| 扎囊县| 保亭| 泾源县| 甘孜县| 阳春市| 志丹县| 雷州市| 铜山县| 乌鲁木齐县| 贡嘎县|