MySQL體系架構解析

1.MySQL體系架構

1.1.MySQL的分支與變種

MySQL變種有好幾個,主要有三個久經考驗的主流變種:Percona Server,MariaDB和 Drizzle。它們都有活躍的用戶社區和一些商業支持,均由獨立的服務供應商支持。同時還有幾個優秀的開源關系數據庫,值得我們了解一下。

1.1.1.Drizzle

Drizzle是真正的MySQL分支,而且是完全開源的產品,而非只是個變種或增強版本。它并不與MySQL兼容不能簡單地將MySQL后端替換為Drizzle。

Drizzle與MySQL有很大差別,進行了一些重大更改,甚至SQL語法的變化都非常大,設計目標之一是提供一種出色的解決方案來解決高可用性問題。在實現上,Drizzle清除了一些表現不佳和不必要的功能,將很多代碼重寫,對它們進行了優化,甚至將所用語言從C換成了C++。

此外,Drizzle另一個設計目標是能很好的適應具有大量內容的多核服務器、運行Linux的64位機器、云計算中使用的服務器、托管網站的服務器和每分鐘接收數以萬計點擊率的服務器并且大幅度的削減服務器成本。

1.1.2.MariaDB

在Sun收購MySQL后,Monty Widenius,這位MySQL的創建者,因不認同MySQL開發流程而離開Sun。他成立了Monty程序公司,創立了MariaDB。MariaDB的目標是社區開發,Bug修復和許多的新特性實際上,可以將MariaDB視為MySQL的擴展集,它不僅提供MySQL提供的所有功能,還提供其他功能。MariaDB是原版MySQL的超集,因此已有的系統不需要任何修改就可以運行。

諸如Google,Facebook、維基百科等公司或者網站所使用了MariaDB。不過Monty公司不是以贏利為目的,而是由產品驅動的,這可能會帶來問題,因為沒有贏利的公司不一定能長久維持下去。

1.1.3.Percona Server

由領先的MySQL咨詢公司Percona發布,Percona公司的口號就是“The Database Performance Experts”,Percona的創始人也就是《高性能MySQL》書的作者。

Percona Server是個與MySQL向后兼容的替代品,它盡可能不改變SQL語法、客戶端/服務器協議和磁盤上的文件格式。任何運行在MySQL上的都可以運行在Percona Server上而不需要修改。切換到Percona Server只需要關閉MySQL和啟動PerconaServer,不需要導出和重新導入數據。

Percona Server有三個主要的目標:透明,增加允許用戶更緊密地查看服務器內部信息和行為的方法。比如慢查詢日志中特別增加的詳細信息;性能,Percona Server包含許多性能和可擴展性方面的改進,還加強了性能的可預測性和穩定性。其中主要集中于InnoDB;操作靈活性,Percona Server使操作人員和系統管理員在讓MySQL作為架構的一部分而可靠并穩定運行時提供了很多便利。

一般來說,Percona Server中的許多特性會在后來的標準MySQL中出現。

國內公司阿里內部就運行了上千個Percona Server的實例。

1.2.MySQL的替代

1.2.1.Postgre SQL

PostgreSQL稱自己是世界上最先進的開源數據庫,同時也是個一專多長的全棧數據庫。最初是1985年在加利福尼亞大學伯克利分校開發的。

PostgreSQL 的穩定性極強,在崩潰、斷電之類的災難場景下依然可以保證數據的正確;在高并發讀寫,負載逼近極限下,PostgreSQL的性能指標仍可以維持雙曲線甚至對數曲線,到頂峰之后不再下降,表現的非常穩定,而 MySQL 明顯出現一個波峰后下滑;

PostgreSQL多年來在GIS(地理信息)領域處于優勢地位,因為它有豐富的幾何類型,實際上不止幾何類型,PostgreSQL有大量字典、數組、bitmap 等數據類型,相比之下mysql就差很多。所以總的來說,PostgreSQL更學術化一些,在絕對需要可靠性和數據完整性的時候,PostgreSQL是更好的選擇。但是從商業支持、文檔資料、易用性,第三方支持來說,MySQL無疑更好些。

1.2.2.SQLite

SQLite是世界上部署最廣泛的數據庫引擎,為物聯網(IoT)下的數據庫首選,并且是手機,PDA,甚至MP3播放器的下的首選。SQLite代碼占用空間小,并且不需要數據庫管理員的維護。SQLite沒有單獨的服務器進程,提供的事務也基本符合ACID。當然,簡單也就意味著功能和性能受限。

2.MySql基礎

2.1.MySQL體系架構

可以看出MySQL是由連接池、管理工具和服務、SQL接口、解析器、優化器、緩存、存儲引擎、文件系統組成。

連接池

由于每次建立建立需要消耗很多時間,連接池的作用就是將這些連接緩存下來,下次可以直接用已經建立好的連接,提升服務器性能。

管理工具和服務

系統管理和控制工具,例如備份恢復、Mysql復制、集群等

SQL接口

接受用戶的SQL命令,并且返回用戶需要查詢的結果。比如select ... from就是調用SQL接口

解析器

SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器主要功能:1、將SQL語句分解成數據結構,后續步驟的傳遞和處理就是基于這個結構的。2、將SQL語句分解成數據結構,后續步驟的傳遞和處理就是基于這個結構的。

優化器

查詢優化器,SQL語句在查詢之前會使用查詢優化器對查詢進行優化。

緩存器

查詢緩存,如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,權限緩存等。

存儲引擎(后面會細講)

文件系統(后面會細講)

2.1.1.連接層

當MySQL啟動(MySQL服務器就是一個進程),等待客戶端連接,每一個客戶端連接請求,服務器進程會創建一個線程專門處理與這個客戶端的交互。當客戶端與該服務器斷開之后,不會立即撤銷線程,只會把他緩存起來等待下一個客戶端請求連接的時候,將其分配給該客戶端。每個線程獨立,擁有各自的內存處理空間。

以下命令可以查看最大的連接數:

show VARIABLES like '%max_connections%' 

連接到服務器,服務器需要對其進行驗證,也就是用戶名、IP、密碼驗證,一旦連接成功,還要驗證是否具有執行某個特定查詢的權限(例如,是否允許客戶端對某個數據庫某個表的某個操作)

2.1.2.Server層(SQL處理層)

這一層主要功能有:SQL語句的解析、優化,緩存的查詢,MySQL內置函數的實現,跨存儲引擎功能(所謂跨存儲引擎就是說每個引擎都需提供的功能(引擎需對外提供接口)),例如:存儲過程、觸發器、視圖等。

當然作為一個SQL的執行流程如下:

1.如果是查詢語句(select語句),首先會查詢緩存是否已有相應結果,有則返回結果,無則進行下一步(如果不是查詢語句,同樣調到下一步)

2.解析查詢,創建一個內部數據結構(解析樹),這個解析樹主要用來SQL語句的語義與語法解析;

3.優化:優化SQL語句,例如重寫查詢,決定表的讀取順序,以及選擇需要的索引等。這一階段用戶是可以查詢的,查詢服務器優化器是如何進行優化的,便于用戶重構查詢和修改相關配置,達到最優化。這一階段還涉及到存儲引擎,優化器會詢問存儲引擎,比如某個操作的開銷信息、是否對特定索引有查詢優化等。

2.1.2.1.緩存(了解即可)
show variables like '%query_cache_type%'   -- 默認不開啟
?
show variables like '%query_cache_size%'  --默認值1M
?
SET GLOBAL query_cache_type = 1; --會報錯

query_cache_type只能配置在my.cnf文件中!

緩存在生產環境建議不開啟

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43077.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Sql Server修改列類型錯誤信息:對象名依賴于列】

Sql Server修改列類型錯誤信息:對象名依賴于列 報錯信息解決方法測試sql語句 報錯信息 修改表中列類型,發生報錯如下: [SQL Server]對象DF__Forecast___isCal__4E746892 依賴于 列isCalcFinished。 (5074) [42000] [Microsoft][ODBC Driver…

L2 LangGraph_Components

參考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph,以下為代碼的實現。 這里用LangGraph把L1的ReAct_Agent實現,可以看出用LangGraph流程化了很多。 LangGraph Components import os from dotenv import load_dotenv, find_do…

2024年高壓電工證考試題庫及高壓電工試題解析

題庫來源:安全生產模擬考試一點通公眾號小程序 2024年高壓電工證考試題庫及高壓電工試題解析是安全生產模擬考試一點通結合(安監局)特種作業人員操作證考試大綱和(質檢局)特種設備作業人員上崗證考試大綱隨機出的高壓…

uniapp vue3微信小程序如何獲取dom元素

在網上很多人說可以通過下面兩種形式獲取到指定dom元素 // 定義ref <div ref"box"></div>//1通過this.$refs獲取dom元素 this.$refs.box//2通過ref(null)獲取dom元素 let box ref(null)第一種方式在vue2中是可以獲取到的&#xff0c;但是在vue3 setup中…

開源項目有哪些機遇與挑戰

目錄 1.概述 2.開源項目的發展趨勢 2.1. 開源項目的發展現狀 2.2. 開源社區的活躍度 2.3. 開源項目在技術創新中的作用 3.參與開源的經驗分享 3.1. 選擇開源項目 3.2. 理解項目結構和文檔 3.3. 貢獻代碼 3.4. 與開源社區的合作 3.5. 學習和成長 4.開源項目的挑戰 …

內褲洗衣機到底值不值得買?五大高質量靠譜內衣洗衣機值得擁有

市場上出現了內衣洗衣機&#xff0c;這種洗衣機比市面上的普通洗衣機的清潔力好&#xff0c;還具有除菌功能&#xff0c;在清洗完內衣褲的過程中&#xff0c;可以將衣物上的細菌去除掉&#xff0c;但市面上的內衣品牌眾多&#xff0c;什么樣的牌子才好用呢&#xff1f;作為一位…

前端簡歷:如何寫項目經歷(經驗)找出細節點和重難點,輕松應對面試?

&#xff08;下面內容&#xff1a;我將結合我的實際項目帶大家進行每一步驟的梳理&#xff09; 項目經歷-堂食外送點餐 2022年2月-2022年5月 項目描述&#xff1a;該平臺提供外送訂餐服務&#xff0c;用戶可以在手機中輕松地瀏覽菜品、下單、支付、編輯地址、填寫個人信息等…

手擼俄羅斯方塊——游戲設計

手擼俄羅斯方塊——游戲設計 概述 上一章我們介紹俄羅斯方塊的基本信息&#xff0c;包括坐標點和方塊的基本概念&#xff0c;這一章節我們繼續介紹如何完成后續的游戲設計。 組成游戲的基本要素 俄羅斯方塊作為一個 2D 的平面游戲&#xff0c;我們可以將整個參與元素做如下…

簡過網:工程專業最吃香的6個證書,你考了幾個了?

工程專業最吃香的6個證書&#xff0c;你考了幾個了&#xff1f;我們一起來看看吧&#xff01; 1、二級建造師 報考條件&#xff1a;工程類大專及以上學歷/從事相關職業 考試時間&#xff1a;3月報名、6月考試 就業前景&#xff1a;建筑設計院、房產開發公司、施工單位 2、一…

如何管理一百個ai專家智能體——ai調度系統設計

前言 如果你用過openai的chatgpt服務&#xff0c;你肯定知道一個叫做GPTs的智能體商店&#xff0c;里面提供了大量的來自官方和個人制作的專門針對某個領域的gpt助手。比如&#xff0c;你想讓gpt幫忙寫文章&#xff0c;并且要能夠寫得好&#xff0c;你就可以在商店中搜索相關的…

【C語言】符號優先級詳解

C語言符號優先級詳細解析 在C語言中&#xff0c;不同的運算符具有不同的優先級和結合性&#xff0c;這決定了在表達式中運算符的計算順序。理解這些優先級和結合性是正確編寫和理解C語言程序的基礎。本文將詳細解析C語言中的符號優先級&#xff0c;包括各類運算符的優先級、結…

Smail語句如何使用判斷語句跳過驗證卡密界面?談談思路

&#x1f3c6;本文收錄于《CSDN問答解惑》專欄&#xff0c;主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案&#xff0c;希望能夠助你一臂之力&#xff0c;幫你早日登頂實現財富自由&#x1f680;&#xff1b;同時&#xff0c;歡迎大家關注&&收藏&…

數據融合工具(5)面中心線提取

這是一個重磅工具&#xff0c;建議先看視頻。 提取中心線 一、需求背景 說真的&#xff0c;當小編第一次使用ArcGIS中的Polygon To Centerline工具提取面要素中心線時&#xff0c;激動得無以言表&#xff0c;畢竟&#xff0c;以前要提取面中心線&#xff0c;是一件非常麻煩的事…

uniapp圖片壓縮之后在上傳

壓縮圖片js方法&#xff0c;新建imgPress.js /** * H5壓縮 二分查找算法來找到一個合適的圖像質量系數&#xff0c;使得壓縮后的圖片文件大小接近于目標大小* param {Object} imgSrc 圖片url * param {Object} callback 回調設置返回值 * */ export function compressH5(fileI…

nginx熱更新詳解及實戰操作

Nginx熱更新&#xff0c;也被稱為平滑升級或熱部署&#xff0c;是指在不中斷Nginx服務的情況下&#xff0c;對Nginx進行升級或更新其配置&#xff0c;以實現業務的無損和用戶無感知的升級過程。以下是關于Nginx熱更新的詳細解釋&#xff1a; 一、Nginx熱更新的原理 Nginx熱更…

Kubernetes APIServer 幾種基本認證方式

"認證"&#xff0c;形象地理解就是"你是誰"。在上文中&#xff0c;用戶A在發起API請求時&#xff0c;管理員如何道該請求是用戶A發起的呢&#xff1f;所以&#xff0c;客戶端在發起API請求時&#xff0c;必須要攜帶一個身份信息來表明"我是誰"&a…

泰勒公式中拉格朗日余項和佩亞諾余項的區別及具體的應用場景案例

泰勒公式是微積分中的一個重要工具&#xff0c;用于將一個函數在某一點附近展開成多項式形式&#xff0c;以便于近似計算和分析。泰勒公式的一般形式為&#xff1a; f ( x ) f ( a ) f ′ ( a ) ( x ? a ) f ′ ′ ( a ) 2 ! ( x ? a ) 2 ? f ( n ) ( a ) n ! ( x ? a…

[CTF]-PWN:House of Cat堆題型綜合解析

原理&#xff1a; 調用順序&#xff1a; exit->_IO_wfile_jumps->_IO_wfile_seekoff->_IO_switch_to_wget_mode _IO_wfile_seekoff源碼&#xff1a; off64_t _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode) {off64_t result;off64_t delta, new…

AI繪畫小白必備!Stable Diffusion常用插件合集,好用推薦!(附插件下載)

前言 寶子們&#xff0c;早上好啊~Stable Diffusion 常用插件&#xff0c;月月已經給大家整理好了&#xff0c;自取就好。 擁有這些SD常用插件&#xff0c;讓您的圖像生成和編輯過程更加強大、直觀、多樣化。以下插件集成了一系列增強功能&#xff0c;覆蓋從自動補全提示詞到…

開源項目:驅動創新與協作的時代引擎

《開源項目&#xff1a;驅動創新與協作的時代引擎》 在當今全球經濟與科技環境瞬息萬變的背景下&#xff0c;開源軟件項目如同一顆璀璨的新星&#xff0c;在開發者社區的天空中熠熠生輝。其蓬勃發展的態勢不僅成為了熱門話題&#xff0c;更是引領著技術領域的變革潮流。 開源…