国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL邏輯體系架構(gòu)的案例分析

2024-07-24 12:33:17
字體:
供稿:網(wǎng)友
  這篇文章主要為大家展示了“MySQL邏輯體系架構(gòu)的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“MySQL邏輯體系架構(gòu)的示例分析”這篇文章吧。
 
  Mysql邏輯體系架構(gòu)(大致架構(gòu)分為三層)
 
  第一層:連接線程處理
 
  客戶端——>連接線程處理(連接處理,授權(quán)認(rèn)證,安全)
 
  所包含的服務(wù)并不是mysql所獨(dú)有的技術(shù),他們都是服務(wù)于C/S程序或者這些程序所需要的(連接處理,授權(quán)認(rèn)證,安全性等等)
 
  第二層:包含大部分mysql核心服務(wù)
 
  查詢緩存——>解析器——>優(yōu)化器——>執(zhí)行查詢
 
  查詢緩存,解析,分析,優(yōu)化,緩存,所有內(nèi)置函數(shù)(日期,時(shí)間,數(shù)學(xué)和加密函數(shù))同時(shí),所有的存儲(chǔ)引擎提供的功能都集中在這一層(存儲(chǔ)過程,觸發(fā)器,視圖)
 
  流程:在解析查詢之前,要先查詢緩存,緩存只能保存查詢的信息和結(jié)果數(shù)據(jù),如果請(qǐng)求一個(gè)查詢?cè)诰彺嬷写嬖冢筒恍枰馕觯瑑?yōu)化和執(zhí)行查詢了,直接返回緩存中所存放的這個(gè)查詢的結(jié)果
 
  第三層:包含存儲(chǔ)引擎
 
  存儲(chǔ)引擎負(fù)責(zé)mysql中數(shù)據(jù)的存儲(chǔ)和提取(和Linux下的文件系統(tǒng)類似)
 
  每種存儲(chǔ)引擎都有優(yōu)勢(shì)及劣勢(shì),中間的服務(wù)層通過API和存儲(chǔ)引擎進(jìn)行通信,這些API接口屏蔽了不同存儲(chǔ)引擎之間的差異,對(duì)于查詢層盡可能的透明化。
 
  存儲(chǔ)引擎API包含了十幾個(gè)底層函數(shù),如執(zhí)行 “ 開始一個(gè)事務(wù) ” ,或取出有特定主鍵的行,但存儲(chǔ)引擎一般不會(huì)去解析SQL,(InnoDB會(huì)解析外鍵定義,因?yàn)槠浔旧頉]有實(shí)現(xiàn)該功能),不同存儲(chǔ)引擎之間也不會(huì)相互通信,而只是簡(jiǎn)單的響應(yīng)上層的服務(wù)器請(qǐng)求。
 
  Mysql邏輯體系架構(gòu)—詳細(xì)介紹(分為八個(gè)步驟)
 
  1.Connectors
 
  指的是不同預(yù)言中與SQL的交互
 
  Nactive C API,JDBC,ODBC,.NET,PHP,Python,Perl,Ruby,VB
 
  2. Enterprise Management Services & Utilities
 
  系統(tǒng)管理和控制工具
 
  Backup & Recovery,Security,Replication,Cluster,Partitioning,Instance Manager,INPORMATICN_SCHEMA,Administrator,Workbench,Query Browser,Migration Toolkit
 
  3. Connection Pool(連接池)
 
  管理緩沖用戶連接,線程處理等需要緩存的需求。
 
  負(fù)責(zé)監(jiān)聽對(duì)MySQL Server的各種請(qǐng)求,接受連接請(qǐng)求,轉(zhuǎn)發(fā)所有連接請(qǐng)求到線程管理模塊。
 
  每一個(gè)連接上MySQL Server的客戶端請(qǐng)求都會(huì)被分配(創(chuàng)建)一個(gè)連接線程為其單獨(dú)服務(wù),并對(duì)連接線程進(jìn)行了緩存,因此不需要為每個(gè)client連接單獨(dú)創(chuàng)建和銷毀,而連接線程的主要工作就是負(fù)責(zé)MySQL Server與客戶端的通信,接收客戶端的命令請(qǐng)求,傳遞Server端的結(jié)果信息,線程管理模塊則負(fù)責(zé)管理維護(hù)這些連接線程,包括線程的創(chuàng)建,線程的cache等等
 
  Authentication -Thread Reuse - Connection Limits - Check Memory -Caches
 
  4.SQL Interface(SQL接口)
 
  接受用戶的SQL命令,并且返回用戶需要查詢返回的結(jié)果,比如select from就是調(diào)用SQL Interface
 
  DML,DDL,Stored Procedures,Views,Triggers,etc
 
  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語句進(jìn)行語義和語法分析,分解成數(shù)據(jù)結(jié)構(gòu),然后按照+同的操作類型進(jìn)行分類,做出針對(duì)性的轉(zhuǎn)發(fā)到后續(xù)步驟,以后SQL語句的傳遞和處理就是基于這個(gè)結(jié)構(gòu)的
 
  b. 如果在分解構(gòu)成中遇到錯(cuò)誤,那么就說明這個(gè)sql語句是不合理的
 
  Query Translation,Object Privilege
 
  6.Optimizer(查詢優(yōu)化器)
 
  SQL語句在查詢之前會(huì)使用查詢優(yōu)化器對(duì)查詢進(jìn)行優(yōu)化,就是優(yōu)化客戶端請(qǐng)求query,根據(jù)客戶端請(qǐng)求的query語句和數(shù)據(jù)庫中的一些統(tǒng)計(jì)信息,在一系列算法基礎(chǔ)上進(jìn)行分析,得出一個(gè)最優(yōu)策略,告訴后面的程序如何取得這個(gè)query語句的結(jié)果,使用的是 “選取-投影-聯(lián)接” 策略進(jìn)行查詢;<br/>比如:select uid,name from user where gender=1;<br/>這個(gè)查詢語句先根據(jù)where后面的語句進(jìn)行選取,而不是先將表全部查詢出來以后再進(jìn)行g(shù)ender過濾,然后根據(jù)uid和name進(jìn)行屬性投影,而不是將所有的屬性全部取出來以后再進(jìn)行過濾,最后將這兩個(gè)查詢條件聯(lián)接起來生成最終的查詢結(jié)果
 
  Access Paths,Statistics
 
  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失效,在讀寫比例非常高的的應(yīng)用系統(tǒng)中,Query Cache對(duì)性能的提高是非常顯著的,當(dāng)然它對(duì)內(nèi)存的消耗也是非常大的。<br/>如果查詢緩存中有有效的命中查詢結(jié)果,查詢語句就可以直接去查詢緩存中取數(shù)據(jù),這個(gè)緩存機(jī)制是由一系列小緩存組成的,比如表緩存,記錄緩存,Key緩存,權(quán)限緩存等等
 
  Global and Engine Specific Caches & Buffers
 
  8.pluggable storage Engines(插件式存儲(chǔ)引擎)
 
  存儲(chǔ)引擎接口:MySQL區(qū)別于其他數(shù)據(jù)庫的最重要的特點(diǎn)就是其插件式的表存儲(chǔ)引擎。
 
  MySQL插件式的存儲(chǔ)引擎架構(gòu)提供了一系列標(biāo)準(zhǔn)的管理和服務(wù)支持,這些標(biāo)準(zhǔn)與存儲(chǔ)引擎本身無關(guān),可能是每個(gè)數(shù)據(jù)庫系統(tǒng)都必須的,比如SQL分析器和優(yōu)化器等,而存儲(chǔ)引擎是底層物理結(jié)構(gòu)的實(shí)現(xiàn)。每個(gè)存儲(chǔ)引擎開發(fā)者都可以按照自己的意愿進(jìn)行開發(fā)。
 
  9.file system
 
  文件系統(tǒng),數(shù)據(jù),日志(redo,undo)索引,錯(cuò)誤日志,查詢記錄,慢查詢等
 
  注意:存儲(chǔ)引擎是基于表的,而不是數(shù)據(jù)庫
 
  數(shù)據(jù)庫的工作流程
 
  建立TCP連接——>驗(yàn)證用戶——>創(chuàng)建線程解析SQL——>生成執(zhí)行計(jì)劃——>開表——>搜尋buffer看所需數(shù)據(jù)頁是否被緩存——>從磁盤掃描數(shù)據(jù)——>獲取數(shù)據(jù)并寫入buffer pool——>返回?cái)?shù)據(jù)給客戶端——>關(guān)閉表——>關(guān)閉線程——>關(guān)閉連接
 
  最上層:客戶端連接
 
  1.連接處理:客戶端同數(shù)據(jù)庫服務(wù)層建立TCP連接,連接管理模塊會(huì)建立連接,并請(qǐng)求一個(gè)連接線程,如果連接池中有空閑的連接線程,則分配給這個(gè)連接,如果沒有,在沒有超過最大線程連接數(shù)的情況下,創(chuàng)建新的連接線程負(fù)責(zé)這個(gè)客戶端
 
  2.授權(quán)認(rèn)證:在query操作之前,還需要調(diào)用用戶模塊進(jìn)行授權(quán)檢查,來驗(yàn)證用戶是否有權(quán)限,通過后,方才提供服務(wù),連接線程開始接受并處理來自客戶端的SQL語句
 
  第二層:核心服務(wù)
 
  1.連接線程接收到SQL語句之后,將語句交給SQL語句解析模塊進(jìn)行語法和語義分析。
 
  2.如果是一個(gè)查詢語句,則可以先看查詢緩存中是否有結(jié)果,如果有結(jié)果則直接返回給客戶端。
 
  3.如果查詢緩存中沒有結(jié)果,則需要查詢數(shù)據(jù)庫引擎層,將SQL語句發(fā)給優(yōu)化器,進(jìn)行查詢的優(yōu)化,如果是表變更,則分類交給insert,update,delete,create,alert處理模塊進(jìn)行處理
 
  第三層:數(shù)據(jù)庫引擎層
 
  1.打開表,如果需要的話獲取相應(yīng)的鎖。
 
  2.先查詢緩存頁中有沒有相應(yīng)的數(shù)據(jù),如果有則可以直接返回,如果沒有則從磁盤上去讀取
 
  3.當(dāng)在磁盤中找到相應(yīng)的數(shù)據(jù)之后,則會(huì)加載到緩存中來,從而使得后面的查詢更加的高效,由于緩存有限,多采用變通的LRU表來管理緩存頁,保證緩存的都是經(jīng)常訪問的數(shù)據(jù)。
 
  4.最后,獲取數(shù)據(jù)后返回給客戶端,關(guān)閉連接,釋放連接線程。
 
  FAQ分析
 
  1.什么是插件式存儲(chǔ)引擎
 
  存儲(chǔ)引擎就是將數(shù)據(jù)對(duì)磁盤進(jìn)行讀寫操作,不同的存儲(chǔ)引擎,讀寫操作方式也不同,事務(wù),鎖等都不一樣因?yàn)槲覀冇胁煌臉I(yè)務(wù)需求,所以會(huì)有很多的存儲(chǔ)引擎,在一個(gè)數(shù)據(jù)庫中,因?yàn)榇鎯?chǔ)引擎是基于表的,所以不同的表可以有不同的存儲(chǔ)引擎,允許將存儲(chǔ)引擎加載到正在運(yùn)行的MySQL服務(wù)器中,這就是插件式存儲(chǔ)引擎
 
  2.什么是LRU緩存
 
  一種緩存淘汰機(jī)制策略算法,因?yàn)榫彺娴膬?nèi)存總是有限的,所以緩存滿了就要?jiǎng)h除一些內(nèi)容,給新內(nèi)容騰位置,而在LRU機(jī)制下,淘汰的數(shù)據(jù)被稱為無用數(shù)據(jù),LRU的全稱是Least Recently Used,也就是我們認(rèn)為最近使用過的數(shù)據(jù)都是有用的,很久都沒用過的數(shù)據(jù)應(yīng)該就是無用的,內(nèi)存滿了就優(yōu)先刪除那些最近很久沒用過的數(shù)據(jù)
 
  在JVM中Ehcache的緩存策略包含
 
  LRU - least recently used(最近最少使用)
 
  LFU - least frequently used(最不經(jīng)常使用)
 
  FIFO - first in first out, the oldest element by creation time(清除最早緩存的數(shù)據(jù),不關(guān)心是否經(jīng)常使用)
 
  以上是“MySQL邏輯體系架構(gòu)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!
 

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 连城县| 陇南市| 秭归县| 定南县| 望谟县| 景东| 晋城| 札达县| 玉溪市| 钟祥市| 阿鲁科尔沁旗| 达州市| 朝阳区| 武宣县| 略阳县| 清水河县| 法库县| 义乌市| 奇台县| 高尔夫| 新余市| 丰原市| 吉安市| 同心县| 抚顺县| 蕲春县| 平谷区| 通化县| 武川县| 集贤县| 长岛县| 秭归县| 湘潭市| 呈贡县| 邛崃市| 沂源县| 舒兰市| 广宁县| 张掖市| 偃师市| 孝感市|