您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“MySQL邏輯體系架構的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“MySQL邏輯體系架構的示例分析”這篇文章吧。
客戶端——>連接線程處理(連接處理,授權認證,安全)
所包含的服務并不是mysql所獨有的技術,他們都是服務于C/S程序或者這些程序所需要的(連接處理,授權認證,安全性等等)
查詢緩存——>解析器——>優化器——>執行查詢
查詢緩存,解析,分析,優化,緩存,所有內置函數(日期,時間,數學和加密函數)同時,所有的存儲引擎提供的功能都集中在這一層(存儲過程,觸發器,視圖)
流程:在解析查詢之前,要先查詢緩存,緩存只能保存查詢的信息和結果數據,如果請求一個查詢在緩存中存在,就不需要解析,優化和執行查詢了,直接返回緩存中所存放的這個查詢的結果
存儲引擎負責mysql中數據的存儲和提取(和Linux下的文件系統類似)
每種存儲引擎都有優勢及劣勢,中間的服務層通過API和存儲引擎進行通信,這些API接口屏蔽了不同存儲引擎之間的差異,對于查詢層盡可能的透明化。
存儲引擎API包含了十幾個底層函數,如執行 “ 開始一個事務 ” ,或取出有特定主鍵的行,但存儲引擎一般不會去解析SQL,(InnoDB會解析外鍵定義,因為其本身沒有實現該功能),不同存儲引擎之間也不會相互通信,而只是簡單的響應上層的服務器請求。
1.Connectors
指的是不同預言中與SQL的交互
Nactive C API,JDBC,ODBC,.NET,PHP,Python,Perl,Ruby,VB
2. Enterprise Management Services & Utilities
系統管理和控制工具
Backup & Recovery,Security,Replication,Cluster,Partitioning,Instance Manager,INPORMATICN_SCHEMA,Administrator,Workbench,Query Browser,Migration Toolkit
3. Connection Pool(連接池)
管理緩沖用戶連接,線程處理等需要緩存的需求。
負責監聽對MySQL Server的各種請求,接受連接請求,轉發所有連接請求到線程管理模塊。
每一個連接上MySQL Server的客戶端請求都會被分配(創建)一個連接線程為其單獨服務,并對連接線程進行了緩存,因此不需要為每個client連接單獨創建和銷毀,而連接線程的主要工作就是負責MySQL Server與客戶端的通信,接收客戶端的命令請求,傳遞Server端的結果信息,線程管理模塊則負責管理維護這些連接線程,包括線程的創建,線程的cache等等
Authentication -Thread Reuse - Connection Limits - Check Memory -Caches
4.SQL Interface(SQL接口)
接受用戶的SQL命令,并且返回用戶需要查詢返回的結果,比如select from就是調用SQL Interface
DML,DDL,Stored Procedures,Views,Triggers,etc
5.Parser(解析器)
SQL命令傳遞到解析器的時候會被解析器驗證和解析,解析器是由Lex和YACC實現的,是一個很長的腳本,在MySQL中我們習慣將所有Client端發給Server端的命令都稱為query,在MySQL Server里面,連接線程接收到客戶端的一個Query后,會直接將query傳遞給專門負責將各種Query進行分類然后轉發給各個對應的處理模塊
主要功能:
a. 將SQL語句進行語義和語法分析,分解成數據結構,然后按照+同的操作類型進行分類,做出針對性的轉發到后續步驟,以后SQL語句的傳遞和處理就是基于這個結構的
b. 如果在分解構成中遇到錯誤,那么就說明這個sql語句是不合理的
Query Translation,Object Privilege
6.Optimizer(查詢優化器)
SQL語句在查詢之前會使用查詢優化器對查詢進行優化,就是優化客戶端請求query,根據客戶端請求的query語句和數據庫中的一些統計信息,在一系列算法基礎上進行分析,得出一個最優策略,告訴后面的程序如何取得這個query語句的結果,使用的是 “選取-投影-聯接” 策略進行查詢;<br/>比如:select uid,name from user where gender=1;<br/>這個查詢語句先根據where后面的語句進行選取,而不是先將表全部查詢出來以后再進行gender過濾,然后根據uid和name進行屬性投影,而不是將所有的屬性全部取出來以后再進行過濾,最后將這兩個查詢條件聯接起來生成最終的查詢結果
Access Paths,Statistics
7.Cache 和 Buffer(查詢緩存)
主要功能是將客戶端提交給 Mysql 的 Select的類query請求的返回的結果集cache到內存中,與該query的一個hash值做一個對應,該query所取數據的基表發生任何數據的變化之后,MySQL會自動使該query的Cache失效,在讀寫比例非常高的的應用系統中,Query Cache對性能的提高是非常顯著的,當然它對內存的消耗也是非常大的。<br/>如果查詢緩存中有有效的命中查詢結果,查詢語句就可以直接去查詢緩存中取數據,這個緩存機制是由一系列小緩存組成的,比如表緩存,記錄緩存,Key緩存,權限緩存等等
Global and Engine Specific Caches & Buffers
8.pluggable storage Engines(插件式存儲引擎)
存儲引擎接口:MySQL區別于其他數據庫的最重要的特點就是其插件式的表存儲引擎。
MySQL插件式的存儲引擎架構提供了一系列標準的管理和服務支持,這些標準與存儲引擎本身無關,可能是每個數據庫系統都必須的,比如SQL分析器和優化器等,而存儲引擎是底層物理結構的實現。每個存儲引擎開發者都可以按照自己的意愿進行開發。
9.file system
文件系統,數據,日志(redo,undo)索引,錯誤日志,查詢記錄,慢查詢等
注意:存儲引擎是基于表的,而不是數據庫
建立TCP連接——>驗證用戶——>創建線程解析SQL——>生成執行計劃——>開表——>搜尋buffer看所需數據頁是否被緩存——>從磁盤掃描數據——>獲取數據并寫入buffer pool——>返回數據給客戶端——>關閉表——>關閉線程——>關閉連接
最上層:客戶端連接
1.連接處理:客戶端同數據庫服務層建立TCP連接,連接管理模塊會建立連接,并請求一個連接線程,如果連接池中有空閑的連接線程,則分配給這個連接,如果沒有,在沒有超過最大線程連接數的情況下,創建新的連接線程負責這個客戶端
2.授權認證:在query操作之前,還需要調用用戶模塊進行授權檢查,來驗證用戶是否有權限,通過后,方才提供服務,連接線程開始接受并處理來自客戶端的SQL語句
第二層:核心服務
1.連接線程接收到SQL語句之后,將語句交給SQL語句解析模塊進行語法和語義分析。
2.如果是一個查詢語句,則可以先看查詢緩存中是否有結果,如果有結果則直接返回給客戶端。
3.如果查詢緩存中沒有結果,則需要查詢數據庫引擎層,將SQL語句發給優化器,進行查詢的優化,如果是表變更,則分類交給insert,update,delete,create,alert處理模塊進行處理
第三層:數據庫引擎層
1.打開表,如果需要的話獲取相應的鎖。
2.先查詢緩存頁中有沒有相應的數據,如果有則可以直接返回,如果沒有則從磁盤上去讀取
3.當在磁盤中找到相應的數據之后,則會加載到緩存中來,從而使得后面的查詢更加的高效,由于緩存有限,多采用變通的LRU表來管理緩存頁,保證緩存的都是經常訪問的數據。
4.最后,獲取數據后返回給客戶端,關閉連接,釋放連接線程。
1.什么是插件式存儲引擎
存儲引擎就是將數據對磁盤進行讀寫操作,不同的存儲引擎,讀寫操作方式也不同,事務,鎖等都不一樣因為我們有不同的業務需求,所以會有很多的存儲引擎,在一個數據庫中,因為存儲引擎是基于表的,所以不同的表可以有不同的存儲引擎,允許將存儲引擎加載到正在運行的MySQL服務器中,這就是插件式存儲引擎
2.什么是LRU緩存
一種緩存淘汰機制策略算法,因為緩存的內存總是有限的,所以緩存滿了就要刪除一些內容,給新內容騰位置,而在LRU機制下,淘汰的數據被稱為無用數據,LRU的全稱是Least Recently Used,也就是我們認為最近使用過的數據都是有用的,很久都沒用過的數據應該就是無用的,內存滿了就優先刪除那些最近很久沒用過的數據
在JVM中Ehcache的緩存策略包含
LRU - least recently used(最近最少使用)
LFU - least frequently used(最不經常使用)
FIFO - first in first out, the oldest element by creation time(清除最早緩存的數據,不關心是否經常使用)
以上是“MySQL邏輯體系架構的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。