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

首頁 > 數據庫 > MySQL > 正文

Mysql源碼學習筆記 偷窺線程

2024-07-24 12:44:28
字體:
來源:轉載
供稿:網友
感覺代碼有些凌亂,注釋代碼都寫的比較隨意,好像沒有什么統一的規范,不同的文件中代碼風格也有差異,可能Mysql經過了很多牛人的手之后,集眾牛人之長吧。也可能是我見識比較淺薄,適應了自己的代碼風格,井底之蛙了,總之還是懷著敬畏的心情開始咱的源碼之旅吧。本人菜鳥,大神輕拍。

  Mysql可以啟動起來了,應該怎么學習呢?總不能從main開始一步一步的看吧,Mysql作為比較底層的大型軟件,涉及到數據庫實現的方方面面,沒有厚實的數據庫理論基礎和對Mysql各個模塊相當的熟悉,從main開始勢必會把自己引入某個死胡同啊,什么都看,最后啥也不會,咱傷不起。

  經過思考后,我想還是通過客戶端來調試服務器,從而學習服務器代碼比較現實。也就是通過客戶端的動作,看服務器的反應。比如從客戶端的登錄動作來看SERVER如何進行通信、用戶識別、鑒定以及任務分配的,通過CREATE TABLE,來看SERVER如何解析DDL語句以及針對不同的存儲引擎采取的不同的物理存儲方式,通過INSERT語句,來看SERVER如何進行Btree的操作。通過SELECT語句來看如何進行SQL語句語法樹的創建和優化的,通過ROLL BACK,來看SERVER事務是如何實現的。這里主要是通過跟蹤代碼學習Mysql數據庫實現的思想,對于具體的代碼不去做過多的追究(主要是我對C++不是很熟悉),好讀書,不求甚解,呵呵。
  由此,暫時準備了以下幾條SQL語句,來有針對的進行SERVER的分析
復制代碼 代碼如下:

1、 LOGIN(登錄)
mysql.exe –uroot –p
2、 DDL(建表語句)
create table tb_myisam(c1 int, c2 varchar(256)) engine = myisam;
create table tb_innodb(c1 int, c2 varchar(256)) engine = innodb;
3、 INSERT
Insert into tb_myisam values(1 , '寂寞的肥肉');
Insert into tb_innodb values(1 , '寂寞的肥肉');
4、 SELECT
Select c1 from tb_myisam;
Select * from tb_innodb;
5、 ROLLBACK

大家都知道,mysql可以通過多個客戶端,進行并發操作,當然也包括登錄了。在別人登錄的時候,其他的用戶可能正在進行一些其它的操作,因此對于登錄我們猜測應該有專門的線程負責客戶端和服務器的連接的創建,以保證登錄的及時性,對于每個連接的用戶,應該用一個獨立的線程進行任務的執行。
  首先介紹下mysql中創建線程的函數,創建線程的函數貌似就是_begin_thread,CreateThread,我們通過VS在整個解決方案中進行查找,bingo!在my_winthread.c中找到了調用_begin_thread的函數pthread_create,在os0thread.c中找到了調用CreateThread的函數os_thread_create,一個系統怎么封裝兩個系統函數呢??再仔細看下,發現my_winthread.c是在項目mysys下,而os0thread.c是在項目innobase下。innobase!!這不就是innodb的插件式存儲引擎么,原來這是存儲引擎自己的封裝的底層函數,哥心中豁然開朗了。我想Mysql應用范圍如此之廣,除了開源之外,插件式的存儲引擎功不可沒啊,用戶可以根據自己的實際應用采取不同的存儲引擎,對于大公司,估計會開發自己的存儲引擎。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 都江堰市| 峡江县| 囊谦县| 石家庄市| 桂平市| 治县。| 五河县| 庆阳市| 上栗县| 枝江市| 大邑县| 时尚| 阿鲁科尔沁旗| 承德市| 克拉玛依市| 泽普县| 留坝县| 铅山县| 宣武区| 平泉县| 廉江市| 沈阳市| 新龙县| 长垣县| 张掖市| 汉寿县| 加查县| 城市| 昆山市| 邯郸市| 军事| 五莲县| 临泉县| 乌海市| 天气| 青浦区| 阳朔县| 东城区| 奎屯市| 如东县| 探索|