日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql源码解读——源码介绍

發(fā)布時(shí)間:2023/12/31 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql源码解读——源码介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

一、mysql介紹

數(shù)據(jù)庫(kù)行業(yè),特別是關(guān)系型數(shù)據(jù)庫(kù)行業(yè),在大約二十年前左右,是相當(dāng)火的,可能現(xiàn)在的搞計(jì)算機(jī)的體會(huì)不深,畢竟各種NoSql和分布式數(shù)據(jù)庫(kù)層出不窮。想當(dāng)年,有一段時(shí)間也想當(dāng)個(gè)DBA去外企香一下。會(huì)寫(xiě)一手好的Sql語(yǔ)句,實(shí)現(xiàn)別人無(wú)法實(shí)現(xiàn)的功能并且速度更快更安全是面試時(shí)的基本要求。
當(dāng)時(shí)能接觸到的數(shù)據(jù)庫(kù),老的文件型的就不提了,基本就是幾家,如Oracle,DB2,賽貝思等,非常少(微軟的SqlServer是后來(lái)的,當(dāng)時(shí)認(rèn)為他只能做中小企業(yè)開(kāi)發(fā)應(yīng)用)。基本上,每個(gè)行業(yè)就用一個(gè)數(shù)據(jù)庫(kù),比如當(dāng)初電力行業(yè)一直就是Oracle,少有的有一兩家用DB2,只有開(kāi)發(fā)一些外圍功能,偶爾會(huì)用SqlServer。
換句話(huà)說(shuō),少就意味著貴重,Sql2000的免費(fèi)版無(wú)法提供一些強(qiáng)大的功能,只能用來(lái)學(xué)習(xí)和在小場(chǎng)景下的應(yīng)用,這也導(dǎo)致了一個(gè)問(wèn)題,人們對(duì)數(shù)據(jù)庫(kù)行業(yè)的期房值很高。一個(gè)DBA會(huì)有非常好的薪水和待遇。特別是Oracle為首的數(shù)據(jù)庫(kù)企業(yè),高收費(fèi)導(dǎo)致很多人根本就不會(huì)選擇它,而初期它的安裝復(fù)雜性也導(dǎo)致了大批的開(kāi)發(fā)人員望而卻步。
直到MySql出現(xiàn),才真正解決了這個(gè)問(wèn)題,把數(shù)據(jù)庫(kù)行業(yè)入門(mén)和學(xué)習(xí)的整體門(mén)檻拉了下來(lái),再加上Sql Server不斷的進(jìn)步,二者的配合,基本把大型應(yīng)用以外的所有領(lǐng)域,特別是互聯(lián)網(wǎng)行業(yè)上,都橫掃了一遍。再加上后來(lái)互聯(lián)網(wǎng)企業(yè)自己搞分布式大數(shù)據(jù)開(kāi)發(fā)(谷歌三論文),海量數(shù)據(jù)的處理,引發(fā)了各種數(shù)據(jù)庫(kù)的爆發(fā),才真正撼動(dòng)了Oracle等大型數(shù)據(jù)庫(kù)企業(yè)的霸主地位。
MySql憑借免費(fèi)和開(kāi)源,迅速的切入了互聯(lián)網(wǎng)行業(yè),而眾所周知的是,近二十年是互聯(lián)網(wǎng)(移動(dòng)互聯(lián)網(wǎng))輝煌的黃金二十年,生逢其時(shí),恰逢其會(huì),所謂,時(shí)也,命也!可惜是現(xiàn)在被Oracle收購(gòu)了,其前景不知道會(huì)是什么樣子。
MySql是比較早期的C/S架構(gòu),即一個(gè)MySql服務(wù)程序(MySqlId),一個(gè)是客戶(hù)端,前者負(fù)責(zé)數(shù)據(jù)庫(kù)的服務(wù)請(qǐng)示的處理和回饋,后者主要是提供連接數(shù)據(jù)庫(kù)和命令操作等。
MySql提供支持的存儲(chǔ)引擎很多,但主要用的有如下三種:
1、MyISAM
對(duì)ISAM存儲(chǔ)引擎進(jìn)行擴(kuò)展。在Web、數(shù)據(jù)倉(cāng)儲(chǔ)和其他應(yīng)用環(huán)境下最常使用的存儲(chǔ)引擎之一。MyISAM擁有較高的插入、查詢(xún)速度,但不支持事物。
2、InnoDB(默認(rèn))
此引擎為MySql默認(rèn)的存儲(chǔ)引擎選項(xiàng),提供了事務(wù)安全表(ACID),行鎖定和外鍵。它具有提交、回滾和崩潰恢復(fù)能力的事物安全(ACID兼容)的強(qiáng)大功能,能夠支持巨大數(shù)量數(shù)據(jù)的高性能應(yīng)用。
3、Memory
類(lèi)似于Redis,存儲(chǔ)數(shù)據(jù)到內(nèi)存中,主要是為了提供快速操作。

mysql_list

二、源碼的結(jié)構(gòu)

源碼的下載可以在:https://dev.mysql.com/downloads/mysql/
在網(wǎng)頁(yè)上“SelectOperating System”選擇“SourceCode”,在“Select OS Version”選項(xiàng)中使用“All”,即可出現(xiàn)下面的列表:

mysql_source

點(diǎn)擊“Download”,進(jìn)入新頁(yè)面后選擇“No thanks, just start my download.”,直接下載即可,根據(jù)網(wǎng)速,二百多兆的數(shù)據(jù)不大也不小。下載后,解壓縮,即可出現(xiàn)代碼,基本結(jié)構(gòu)如下:

mysql_dic

代碼的主要功能如下:
boost:這個(gè)版本是自帶Boost的庫(kù)相關(guān)文件的,放在此處,如果是其它的版本就沒(méi)有這個(gè)文件夾
client:客戶(hù)端相關(guān)的軟件和工具代碼
cmake:CMAKE相關(guān)的腳本命令文件
components:組件工具
Docs:文檔文件夾
doxyen_resources:doxyen工具相關(guān)資源
extra:引入的一些其它包,如網(wǎng)絡(luò)消息誰(shuí)的SSL包以及一些小工具。
include:源碼用的相關(guān)的頭文件放置的文件夾,但不包括存儲(chǔ)引擎的頭文件。
libbinlogevents:解析Binlog的lib服務(wù),5.7后提供。
libbinlogstandalone:脫機(jī)配置CMAKE
libmysql:可嵌入式的客戶(hù)端API
libservices:動(dòng)態(tài)服務(wù)插件管理
man:幫助文檔
mysql-test:服務(wù)端mysqlid的測(cè)試工具。
mysys:MySql自己實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)和一些基本算法。如數(shù)組和鏈表等。
packaging:打包相關(guān)
plugin:插件管理文件夾,包括一些動(dòng)態(tài)加入的插件。
router:集群路由
scripts:系統(tǒng)工具運(yùn)行的腳本。
share:共享信息,err和字符集
source_downloads:
sql:服務(wù)端的主要代碼,包括main函數(shù)。
sql-common:服務(wù)端和客戶(hù)端通用的一些代碼。
storage:存儲(chǔ)引擎相關(guān)文件。
strings:字符串庫(kù)
support-files:.conf的示例文件和相關(guān)工具。
testclients:客戶(hù)框架測(cè)試。
unittest:單元測(cè)試,這個(gè)搞程序的都知道。
utilities:公用的一些文件,有ZLIB等
vio:虛擬網(wǎng)絡(luò)IO處理系統(tǒng),不同平臺(tái)或不同協(xié)議的網(wǎng)絡(luò)通信API的二次封裝。

三、體系結(jié)構(gòu)

MySql的體系結(jié)構(gòu)主要如下:

mysql_construct

其主要分為以下幾層:
1、連接管理層,包括連接池支持的各種組件
2、服務(wù)管理層,含管理服務(wù)和相關(guān)工具、接口、分析、優(yōu)化等組件。
3、存儲(chǔ)引擎,含各種以插件提供的數(shù)據(jù)存儲(chǔ)引擎。
4、文件存儲(chǔ)層,含各種實(shí)際落到硬盤(pán)的物理文件。

四、總結(jié)

Mysql+PHP想當(dāng)初可是在互聯(lián)網(wǎng)橫掃過(guò)一段時(shí)間,“PHP是世界上最好的語(yǔ)言”這個(gè)梗大家應(yīng)該都知道,MySql的優(yōu)勢(shì)是不言而喻的,機(jī)會(huì)也是不用說(shuō)的,都遇到了,自然就會(huì)飛起。其實(shí)數(shù)據(jù)庫(kù)的原理科班出身的都學(xué)過(guò),但是怎么寫(xiě)出一個(gè)成熟的商業(yè)產(chǎn)品,是國(guó)內(nèi)的大佬兒們?nèi)鄙俚摹V辽俚侥壳盀橹?#xff0c;國(guó)產(chǎn)的能拿的出手并且應(yīng)用比較廣泛的,仍然是少之又少。這也是國(guó)內(nèi)寫(xiě)數(shù)據(jù)庫(kù)開(kāi)發(fā)者的悲哀,越是無(wú)法深入到軟件底層,越是對(duì)開(kāi)發(fā)者的要求低,就是越是卡各種年齡和其它的無(wú)關(guān)的要求。
希望能從閱讀學(xué)習(xí)優(yōu)秀的開(kāi)源數(shù)據(jù)庫(kù)軟件代碼,把人家的思想學(xué)進(jìn)來(lái),這才是重中之重!買(mǎi)辦思想,救不了國(guó)內(nèi)的數(shù)據(jù)庫(kù)軟件!
另:MySql的安裝配置以及應(yīng)用不在本文范疇,可去網(wǎng)上查找相關(guān)資料。

?

總結(jié)

以上是生活随笔為你收集整理的mysql源码解读——源码介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。