本篇內(nèi)容主要講解“MySQL的邏輯架構(gòu)及工作流程是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“MySQL的邏輯架構(gòu)及工作流程是什么”吧!
創(chuàng)新互聯(lián)公司專注于什邡網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供什邡營銷型網(wǎng)站建設(shè),什邡網(wǎng)站制作、什邡網(wǎng)頁設(shè)計(jì)、什邡網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造什邡網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供什邡網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
MySql并不完美,但是卻足夠靈活,能夠適應(yīng)高要求的環(huán)境。同時,MySql既可以嵌入到應(yīng)用程序中,也可以支持?jǐn)?shù)據(jù)倉庫、內(nèi)容索引和部署軟件、高可用的冗余系統(tǒng)、在線事務(wù)處理系統(tǒng)等各種應(yīng)用類型。
為了更心如的理解MySql服務(wù)器,我們需要理解MySql各部件之間如何協(xié)同工作。需要我們?nèi)ダ斫馑倪壿嫾軜?gòu)。
下面我們就來介紹一下MySql的邏輯架構(gòu):
MySQL的最重要、最與眾不同的特性就是它的存儲引擎架構(gòu),這種架構(gòu)將查詢處理以及其他系統(tǒng)任務(wù)和數(shù)據(jù)的存儲/提取相分離。
所帶來的好處就是可以在使用時根據(jù)性能、特性,以及其他需求來選擇數(shù)據(jù)存儲的方式。
下圖就是MySQL的邏輯架構(gòu)圖:

MySQL架構(gòu)總共三層,在上圖中以虛線作為劃分。
首先,最上層的服務(wù)并不是MySQL獨(dú)有的,大多數(shù)給予網(wǎng)絡(luò)的客戶端/服務(wù)器的工具或者服務(wù)都有類似的架構(gòu)。比如:連接處理、授權(quán)認(rèn)證、安全等。
第二層的架構(gòu)包括大多數(shù)的MySQL的核心服務(wù)。包括:查詢解析、分析、優(yōu)化、緩存以及所有的內(nèi)置函數(shù)(例如:日期、時間、數(shù)學(xué)和加密函數(shù))。同時,所有的跨存儲引擎的功能都在這一層實(shí)現(xiàn):存儲過程、觸發(fā)器、視圖等。
第三層包含了存儲引擎。存儲引擎負(fù)責(zé)MySQL中數(shù)據(jù)的存儲和提取。服務(wù)器通過API和存儲引擎進(jìn)行通信。這些接口屏蔽了不同存儲引擎之間的差異,使得這些差異對上層的查詢過程透明化。存儲引擎API包含十幾個底層函數(shù),用于執(zhí)行“開始一個事務(wù)”等操作。但存儲引擎一般不會去解析SQL(InnoDB會解析外鍵定義,因?yàn)槠浔旧頉]有實(shí)現(xiàn)該功能),不同存儲引擎之間也不會相互通信,而只是簡單的響應(yīng)上層的服務(wù)器請求。
看完上圖后,大家是不是覺得MySQL的系統(tǒng)架構(gòu)挺簡單的?其實(shí)不然。
上圖只是MySQL系統(tǒng)架構(gòu)的大的模塊圖,其實(shí)每一層的結(jié)構(gòu)都相當(dāng)復(fù)雜,下圖就是詳細(xì)模塊圖:

首先,我們對該圖中的各個模塊做一簡單介紹:
指的是不同語言中與SQL的交互。
管理緩沖用戶連接,線程處理等需要緩存的需求。負(fù)責(zé)監(jiān)聽對 MySQL Server 的各種請求,接收連接請求,轉(zhuǎn)發(fā)所有連接請求到線程管理模塊。每一個連接上 MySQL Server 的客戶端請求都會被分配(或創(chuàng)建)一個連接線程為其單獨(dú)服務(wù)。而連接線程的主要工作就是負(fù)責(zé) MySQL Server 與客戶端的通信,接受客戶端的命令請求,傳遞 Server 端的結(jié)果信息等。線程管理模塊則負(fù)責(zé)管理維護(hù)這些連接線程。包括線程的創(chuàng)建,線程的 cache 等。
系統(tǒng)管理和控制工具。
接受用戶的SQL命令,并且返回用戶需要查詢的結(jié)果。
SQL命令傳遞到解析器的時候會被解析器驗(yàn)證和解析。解析器是由Lex和YACC實(shí)現(xiàn)的,是一個很長的腳本。在 MySQL中我們習(xí)慣將所有 Client 端發(fā)送給 Server 端的命令都稱為 query ,在 MySQL Server 里面,連接線程接收到客戶端的一個 Query 后,會直接將該 query 傳遞給專門負(fù)責(zé)將各種 Query 進(jìn)行分類然后轉(zhuǎn)發(fā)給各個對應(yīng)的處理模塊。
主要功能:
a 、 將SQL語句進(jìn)行語義和語法的分析,分解成數(shù)據(jù)結(jié)構(gòu),然后按照不同的操作類型進(jìn)行分類,然后做出針對性的轉(zhuǎn)發(fā)到后續(xù)步驟,以后SQL語句的傳遞和處理就是基于這個結(jié)構(gòu)的;
b、 如果在分解構(gòu)成中遇到錯誤,那么就說明這個sql語句是不合理的。
查詢優(yōu)化器:SQL語句在查詢之前會使用查詢優(yōu)化器對查詢進(jìn)行優(yōu)化。就是優(yōu)化客戶端請求query,根據(jù)客戶端請求的 query 語句,和數(shù)據(jù)庫中的一些統(tǒng)計(jì)信息,在一系列算法的基礎(chǔ)上進(jìn)行分析,得出一個最優(yōu)的策略,告訴后面的程序如何取得這個 query 語句的結(jié)果。
使用的是“選取-投影-聯(lián)接”策略進(jìn)行查詢:
用一個例子就可以理解: select uid,name from user where gender = 1;
這個select 查詢先根據(jù)where 語句進(jìn)行選取,而不是先將表全部查詢出來以后再進(jìn)行g(shù)ender過濾;然后根據(jù)uid和name進(jìn)行屬性投影,而不是將屬性全部取出以后再進(jìn)行過濾。最后將這兩個查詢條件聯(lián)接起來生成最終查詢結(jié)果。
查詢緩存:主要功能是將客戶端提交 給MySQL 的 Select 類 query 請求的返回結(jié)果集 cache 到內(nèi)存中,與該 query 的一個 hash 值 做一個對應(yīng)。該 query 所取數(shù)據(jù)的基表發(fā)生任何數(shù)據(jù)的變化之后, MySQL 會自動使該 query 的Cache 失效。在讀寫比例非常高的應(yīng)用系統(tǒng)中, Query Cache 對性能的提高是非常顯著的。當(dāng)然它對內(nèi)存的消耗也是非常大的。
如果查詢緩存有命中的查詢結(jié)果,查詢語句就可以直接去查詢緩存中取數(shù)據(jù)。這個緩存機(jī)制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,權(quán)限緩存等。
MySQL區(qū)別于其他數(shù)據(jù)庫的最重要的特點(diǎn)就是其插件式的表存儲引擎。MySQL插件式的存儲引擎架構(gòu)提供了一系列標(biāo)準(zhǔn)的管理和服務(wù)支持,這些標(biāo)準(zhǔn)與存儲引擎本身無關(guān),可能是每個數(shù)據(jù)庫系統(tǒng)本身都必需的,如SQL分析器和優(yōu)化器等,而存儲引擎是底層物理結(jié)構(gòu)的實(shí)現(xiàn),每個存儲引擎開發(fā)者都可以按照自己的意愿來進(jìn)行開發(fā)。
注意:存儲引擎是基于表的,而不是數(shù)據(jù)庫。
相信通過上述的介紹,大家對MySQL的邏輯架構(gòu)已經(jīng)有了一定的了解,下面我們下來介紹一下數(shù)據(jù)庫具體的工作流程,先看一張圖:

在這里,我從數(shù)據(jù)庫架構(gòu)的三個層面分別介紹數(shù)據(jù)庫的工作流程:
1、連接處理:客戶端同數(shù)據(jù)庫服務(wù)層建立TCP連接,連接管理模塊會建立連接,并請求一個連接線程。如果連接池中有空閑的連接線程,則分配給這個連接,如果沒有,在沒有超過最大連接數(shù)的情況下,創(chuàng)建新的連接線程負(fù)責(zé)這個客戶端。
2、授權(quán)認(rèn)證:在真正的操作之前,還需要調(diào)用用戶模塊進(jìn)行授權(quán)檢查,來驗(yàn)證用戶是否有權(quán)限。通過后,方才提供服務(wù),連接線程開始接收并處理來自客戶端的SQL語句。
1、連接線程接收到SQL語句之后,將語句交給SQL語句解析模塊進(jìn)行語法分析和語義分析。
2、如果是一個查詢語句,則可以先看查詢緩存中是否有結(jié)果,如果有結(jié)果可以直接返回給客戶端。
3、如果查詢緩存中沒有結(jié)果,就需要真的查詢數(shù)據(jù)庫引擎層了,于是發(fā)給SQL優(yōu)化器,進(jìn)行查詢的優(yōu)化。如果是表變更,則分別交給insert、update、delete、create、alter處理模塊進(jìn)行處理。
1、打開表,如果需要的話獲取相應(yīng)的鎖。
2、先查詢緩存頁中有沒有相應(yīng)的數(shù)據(jù),如果有則可以直接返回,如果沒有就要從磁盤上去讀取。
3、當(dāng)在磁盤中找到相應(yīng)的數(shù)據(jù)之后,則會加載到緩存中來,從而使得后面的查詢更加高效,由于內(nèi)存有限,多采用變通的LRU表來管理緩存頁,保證緩存的都是經(jīng)常訪問的數(shù)據(jù)。
最后,獲取數(shù)據(jù)后返回給客戶端,關(guān)閉連接,釋放連接線程。
到此,相信大家對“MySQL的邏輯架構(gòu)及工作流程是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
新聞名稱:MySQL的邏輯架構(gòu)及工作流程是什么
本文來源:http://www.chinadenli.net/article46/pesjeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)站排名、App設(shè)計(jì)、品牌網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)