mysql源码解读——源码介绍
?
一、mysql介紹
數(shù)據(jù)庫行業(yè),特別是關(guān)系型數(shù)據(jù)庫行業(yè),在大約二十年前左右,是相當(dāng)火的,可能現(xiàn)在的搞計算機的體會不深,畢竟各種NoSql和分布式數(shù)據(jù)庫層出不窮。想當(dāng)年,有一段時間也想當(dāng)個DBA去外企香一下。會寫一手好的Sql語句,實現(xiàn)別人無法實現(xiàn)的功能并且速度更快更安全是面試時的基本要求。
當(dāng)時能接觸到的數(shù)據(jù)庫,老的文件型的就不提了,基本就是幾家,如Oracle,DB2,賽貝思等,非常少(微軟的SqlServer是后來的,當(dāng)時認(rèn)為他只能做中小企業(yè)開發(fā)應(yīng)用)。基本上,每個行業(yè)就用一個數(shù)據(jù)庫,比如當(dāng)初電力行業(yè)一直就是Oracle,少有的有一兩家用DB2,只有開發(fā)一些外圍功能,偶爾會用SqlServer。
換句話說,少就意味著貴重,Sql2000的免費版無法提供一些強大的功能,只能用來學(xué)習(xí)和在小場景下的應(yīng)用,這也導(dǎo)致了一個問題,人們對數(shù)據(jù)庫行業(yè)的期房值很高。一個DBA會有非常好的薪水和待遇。特別是Oracle為首的數(shù)據(jù)庫企業(yè),高收費導(dǎo)致很多人根本就不會選擇它,而初期它的安裝復(fù)雜性也導(dǎo)致了大批的開發(fā)人員望而卻步。
直到MySql出現(xiàn),才真正解決了這個問題,把數(shù)據(jù)庫行業(yè)入門和學(xué)習(xí)的整體門檻拉了下來,再加上Sql Server不斷的進步,二者的配合,基本把大型應(yīng)用以外的所有領(lǐng)域,特別是互聯(lián)網(wǎng)行業(yè)上,都橫掃了一遍。再加上后來互聯(lián)網(wǎng)企業(yè)自己搞分布式大數(shù)據(jù)開發(fā)(谷歌三論文),海量數(shù)據(jù)的處理,引發(fā)了各種數(shù)據(jù)庫的爆發(fā),才真正撼動了Oracle等大型數(shù)據(jù)庫企業(yè)的霸主地位。
MySql憑借免費和開源,迅速的切入了互聯(lián)網(wǎng)行業(yè),而眾所周知的是,近二十年是互聯(lián)網(wǎng)(移動互聯(lián)網(wǎng))輝煌的黃金二十年,生逢其時,恰逢其會,所謂,時也,命也!可惜是現(xiàn)在被Oracle收購了,其前景不知道會是什么樣子。
MySql是比較早期的C/S架構(gòu),即一個MySql服務(wù)程序(MySqlId),一個是客戶端,前者負(fù)責(zé)數(shù)據(jù)庫的服務(wù)請示的處理和回饋,后者主要是提供連接數(shù)據(jù)庫和命令操作等。
MySql提供支持的存儲引擎很多,但主要用的有如下三種:
1、MyISAM
對ISAM存儲引擎進行擴展。在Web、數(shù)據(jù)倉儲和其他應(yīng)用環(huán)境下最常使用的存儲引擎之一。MyISAM擁有較高的插入、查詢速度,但不支持事物。
2、InnoDB(默認(rèn))
此引擎為MySql默認(rèn)的存儲引擎選項,提供了事務(wù)安全表(ACID),行鎖定和外鍵。它具有提交、回滾和崩潰恢復(fù)能力的事物安全(ACID兼容)的強大功能,能夠支持巨大數(shù)量數(shù)據(jù)的高性能應(yīng)用。
3、Memory
類似于Redis,存儲數(shù)據(jù)到內(nèi)存中,主要是為了提供快速操作。
mysql_list
二、源碼的結(jié)構(gòu)
源碼的下載可以在:https://dev.mysql.com/downloads/mysql/
在網(wǎng)頁上“SelectOperating System”選擇“SourceCode”,在“Select OS Version”選項中使用“All”,即可出現(xiàn)下面的列表:
mysql_source
點擊“Download”,進入新頁面后選擇“No thanks, just start my download.”,直接下載即可,根據(jù)網(wǎng)速,二百多兆的數(shù)據(jù)不大也不小。下載后,解壓縮,即可出現(xiàn)代碼,基本結(jié)構(gòu)如下:
mysql_dic
代碼的主要功能如下:
boost:這個版本是自帶Boost的庫相關(guān)文件的,放在此處,如果是其它的版本就沒有這個文件夾
client:客戶端相關(guān)的軟件和工具代碼
cmake:CMAKE相關(guān)的腳本命令文件
components:組件工具
Docs:文檔文件夾
doxyen_resources:doxyen工具相關(guān)資源
extra:引入的一些其它包,如網(wǎng)絡(luò)消息誰的SSL包以及一些小工具。
include:源碼用的相關(guān)的頭文件放置的文件夾,但不包括存儲引擎的頭文件。
libbinlogevents:解析Binlog的lib服務(wù),5.7后提供。
libbinlogstandalone:脫機配置CMAKE
libmysql:可嵌入式的客戶端API
libservices:動態(tài)服務(wù)插件管理
man:幫助文檔
mysql-test:服務(wù)端mysqlid的測試工具。
mysys:MySql自己實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)和一些基本算法。如數(shù)組和鏈表等。
packaging:打包相關(guān)
plugin:插件管理文件夾,包括一些動態(tài)加入的插件。
router:集群路由
scripts:系統(tǒng)工具運行的腳本。
share:共享信息,err和字符集
source_downloads:
sql:服務(wù)端的主要代碼,包括main函數(shù)。
sql-common:服務(wù)端和客戶端通用的一些代碼。
storage:存儲引擎相關(guān)文件。
strings:字符串庫
support-files:.conf的示例文件和相關(guān)工具。
testclients:客戶框架測試。
unittest:單元測試,這個搞程序的都知道。
utilities:公用的一些文件,有ZLIB等
vio:虛擬網(wǎng)絡(luò)IO處理系統(tǒng),不同平臺或不同協(xié)議的網(wǎng)絡(luò)通信API的二次封裝。
三、體系結(jié)構(gòu)
MySql的體系結(jié)構(gòu)主要如下:
mysql_construct
其主要分為以下幾層:
1、連接管理層,包括連接池支持的各種組件
2、服務(wù)管理層,含管理服務(wù)和相關(guān)工具、接口、分析、優(yōu)化等組件。
3、存儲引擎,含各種以插件提供的數(shù)據(jù)存儲引擎。
4、文件存儲層,含各種實際落到硬盤的物理文件。
四、總結(jié)
Mysql+PHP想當(dāng)初可是在互聯(lián)網(wǎng)橫掃過一段時間,“PHP是世界上最好的語言”這個梗大家應(yīng)該都知道,MySql的優(yōu)勢是不言而喻的,機會也是不用說的,都遇到了,自然就會飛起。其實數(shù)據(jù)庫的原理科班出身的都學(xué)過,但是怎么寫出一個成熟的商業(yè)產(chǎn)品,是國內(nèi)的大佬兒們?nèi)鄙俚摹V辽俚侥壳盀橹?#xff0c;國產(chǎn)的能拿的出手并且應(yīng)用比較廣泛的,仍然是少之又少。這也是國內(nèi)寫數(shù)據(jù)庫開發(fā)者的悲哀,越是無法深入到軟件底層,越是對開發(fā)者的要求低,就是越是卡各種年齡和其它的無關(guān)的要求。
希望能從閱讀學(xué)習(xí)優(yōu)秀的開源數(shù)據(jù)庫軟件代碼,把人家的思想學(xué)進來,這才是重中之重!買辦思想,救不了國內(nèi)的數(shù)據(jù)庫軟件!
另:MySql的安裝配置以及應(yīng)用不在本文范疇,可去網(wǎng)上查找相關(guān)資料。
?
總結(jié)
以上是生活随笔為你收集整理的mysql源码解读——源码介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高校全场景智慧教室建设方案
- 下一篇: mysql如何源码安装_超详细的MySQ