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