這篇文章為大家帶來了關於mysql中的相關知識,其中主要介紹了mysql邏輯體系架構的相關問題,大致架構分為三層,分別用於連接線程處理、包含大部分mysql核心服務和包含儲存引擎,希望對大家有幫助。
推薦學習:mysql學習教學
Mysql邏輯體系架構(大致架構分為三層)
第一層:連接執行緒處理
客戶端->連線執行緒處理(連線處理,授權認證,安全性)
所包含的服務並不是mysql所獨有的技術,他們都是服務於C/S程序或這些程序所需要的(連接處理,授權認證,安全性等等)
#第二層:包含大部分mysql核心服務
查詢快取->解析器->最佳化器->執行查詢
#查詢緩存,解析,分析,優化,緩存,所有內建函數(日期,時間,數學和加密函數)同時,所有的儲存引擎提供的功能都集中在這一層(存儲過程,觸發器,視圖)
流程:在解析查詢之前,要先查詢緩存,緩存只能保存查詢的資訊和結果數據,如果請求一個查詢在緩存中存在,就不需要解析,優化和執行查詢了,直接傳回快取中所存放的這個查詢的結果
第三層:包含儲存引擎
儲存引擎負責mysql中資料的儲存與擷取(和Linux下的檔案系統類似)
#每種儲存引擎都有優勢及劣勢,中間的服務層透過API和儲存引擎進行通信,這些API介面屏蔽了不同儲存引擎之間的差異,對於查詢層盡可能的透明化。
儲存引擎API包含了十幾個底層函數,如執行「 開始一個交易」 ,或取出有特定主鍵的行,但儲存引擎一般不會去解析SQL,(InnoDB會解析外鍵定義,因為其本身沒有實現該功能),不同儲存引擎之間也不會相互通信,而只是簡單的響應上層的伺服器請求。
Mysql邏輯體系架構—詳細介紹(分成八個步驟)
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語句的結果,使用的是「選取-投影-聯接」策略查詢;
例如:select uid,name from user where gender=1;
這個查詢語句先根據where後面的語句進行選取,而不是先將表格全部查詢出來以後再進行gender過濾,然後根據uid和name進行屬性投影,而不是將所有的屬性全部取出來以後再進行過濾,最後將這兩個查詢條件聯接起來產生最終的查詢結果
Access Paths,Statistics
7.Cache 和Buffer(查詢快取)
主要功能是將客戶端提交給Mysql 的Select的類別query請求的傳回的結果集cache到記憶體中,與該query的一個hash值做一個對應,該query所取資料的基底表發生任何資料的變化之後,MySQL會自動使該query的Cache失效,在讀寫在比例非常高的應用系統中,Query Cache對效能的提升是非常顯著的,當然它對記憶體的消耗也是非常大的。
如果查詢快取中有有效的命中查詢結果,查詢語句就可以直接去查詢緩存中取數據,這個緩存機制是由一系列小緩存組成的,比如表緩存,記錄緩存,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.最後,取得資料後返回給客戶端,關閉連接,釋放連接執行緒。
FAQ分析
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教學
#以上是一起聊聊MySQL邏輯體系架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

mysqloffersvariousStorageengines,每個suitedfordferentusecases:1)InnodBisidealForapplicationsNeedingingAcidComplianCeanDhighConcurncurnency,supportingtransactionsancions and foreignkeys.2)myisamisbestforread-Heavy-Heavywyworks,lackingtransactionsactionsacupport.3)記憶

MySQL中常見的安全漏洞包括SQL注入、弱密碼、權限配置不當和未更新的軟件。 1.SQL注入可以通過使用預處理語句防止。 2.弱密碼可以通過強制使用強密碼策略避免。 3.權限配置不當可以通過定期審查和調整用戶權限解決。 4.未更新的軟件可以通過定期檢查和更新MySQL版本來修補。

在MySQL中識別慢查詢可以通過啟用慢查詢日誌並設置閾值來實現。 1.啟用慢查詢日誌並設置閾值。 2.查看和分析慢查詢日誌文件,使用工具如mysqldumpslow或pt-query-digest進行深入分析。 3.優化慢查詢可以通過索引優化、查詢重寫和避免使用SELECT*來實現。

要監控MySQL服務器的健康和性能,應關注系統健康、性能指標和查詢執行。 1)監控系統健康:使用top、htop或SHOWGLOBALSTATUS命令查看CPU、內存、磁盤I/O和網絡活動。 2)追踪性能指標:監控查詢每秒數、平均查詢時間和緩存命中率等關鍵指標。 3)確保查詢執行優化:啟用慢查詢日誌,記錄並優化執行時間超過設定閾值的查詢。

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版
中文版,非常好用

WebStorm Mac版
好用的JavaScript開發工具