我在 MySQL 的那些年
作者:賴錚(Allen Lai),前 MySQL 官方團(tuán)隊(duì)成員,專注數(shù)據(jù)庫內(nèi)核開發(fā)近二十年,先后就職于達(dá)夢(mèng),Teradata,北大方正以及 MySQL InnoDB 存儲(chǔ)引擎團(tuán)隊(duì),是達(dá)夢(mèng)數(shù)據(jù)庫內(nèi)核,方正 XML 數(shù)據(jù)庫,以及 MySQL InnoDB 的 GIS 支持,透明加密功能的主要開發(fā)者。現(xiàn)任騰訊 TEG 云架構(gòu)平臺(tái)部數(shù)據(jù)庫團(tuán)隊(duì)專家工程師,負(fù)責(zé)騰訊云 CDB 數(shù)據(jù)庫內(nèi)核的研發(fā)。
面試
2012 年的春天,陽光明媚,鳥語花香,我正在張江的一棟橙黃色的大樓里跟我的小伙伴們一起奮力的敲打著鍵盤,隨著一陣輕柔的電話鈴響起,手機(jī)屏幕上顯示出一個(gè)陌生的號(hào)碼,是不是又是騷擾電話,沒管他,我接著敲自己的鍵盤。手機(jī)一直在震動(dòng)著,好像催促著我,我拿起它,電話接通,那頭傳來一個(gè)非常輕柔而且職業(yè)化的女聲,“你好,我是 Oracle 的招聘顧問 Amy,請(qǐng)問您現(xiàn)在方便嗎?…”。我的職業(yè)生涯從此與 MySQL 發(fā)生了交集。
Amy 告訴我 MySQLInnoDB 團(tuán)隊(duì)有意在中國招聘合適的數(shù)據(jù)庫內(nèi)核工程師,問我有沒有興趣加入。我去,MySQL,the world’s most popular open source database,邀請(qǐng)我加入?我想都沒想就回答她,當(dāng)然有,而且興趣很大。Amy 是個(gè)非常專業(yè)的 HR,非常有效率的安排了我后面的面試事宜,懷著一絲忐忑和興奮,我開始了進(jìn)入 MySQL 團(tuán)隊(duì)的面試。
面試第一輪:InnoDB 團(tuán)隊(duì) manager,Calvin。Calvin 是數(shù)據(jù)庫領(lǐng)域的專家,早年中科大畢業(yè)出國的那批牛人之一(后續(xù)的文章我會(huì)專門介紹 MySQL 的牛人們)。
面試第二輪:InnoDB 性能優(yōu)化專家 Innam,Innam 是緩沖池性能優(yōu)化的作者。
面試第三輪:InnoDB 大神 o。o 是 InnoDB 創(chuàng)始團(tuán)隊(duì)成員之一,存儲(chǔ)引擎技術(shù)的大神級(jí)專家
面試第四輪:InnoDB 架構(gòu)師 Jimmy。Jimmy 也是數(shù)據(jù)庫內(nèi)核的全能型專家,而且是之前是 sybase 內(nèi)核團(tuán)隊(duì)的老大。
MySQL 的面試并沒有想象中的那么多規(guī)則和高難度,前后 4 輪,基本都是聊天,主要圍繞以前做過的事情和對(duì)數(shù)據(jù)庫內(nèi)核的理解。印象比較深的是三件事,一個(gè)是 Innam 的口音實(shí)在太重,加上從遙遠(yuǎn)的加拿大打過來,偶英語聽力也的確水平不高,所以,好多問題都沒聽懂,當(dāng)時(shí)是慌得一批。
另外一個(gè)是 o 用 google talk 問了一個(gè)如何發(fā)現(xiàn)事務(wù)死鎖的問題,而且打字速度超級(jí)快,以至于我認(rèn)為對(duì)面是個(gè)打字機(jī)器,直到見到他真人才發(fā)現(xiàn),他就是一臺(tái)沒有感情的程序機(jī)器(其實(shí),o 還是很有意思的一個(gè)人,后面的連載會(huì)介紹他的一些趣事)。Jimmy 的面試是在一個(gè)南京西路的咖啡廳里面進(jìn)行的,兩個(gè)人似曾相識(shí)一般聊了蠻久。Jimmy 是特別贊的一個(gè)人,很有親和力。整個(gè)面試的流程總體感覺比較輕松,偶也沒有刻意準(zhǔn)備,或許真的是幸運(yùn)。
團(tuán)隊(duì)
就傳統(tǒng)的軟件企業(yè)來說,MySQL 的團(tuán)隊(duì)架構(gòu)相對(duì)比較扁平化,層級(jí)很少,像我這樣的基礎(chǔ)員工,離 Oracle 的老板 Larry Ellison 也就隔了五層。這里面的原因主要是 Oracle 收購 MySQL 后的很長一段時(shí)間里,基本保留了 MySQL 團(tuán)隊(duì)的原有架構(gòu)和人員,只是做了一些簡(jiǎn)單接入。
整個(gè) MySQL 分為好幾個(gè)大的團(tuán)隊(duì),有 MySQL kernel,MySQL replication,MySQL NDB 等等,這些大的團(tuán)隊(duì)里面又細(xì)分為若干小的團(tuán)隊(duì),比如:MySQL kernel 團(tuán)隊(duì)里面又分為優(yōu)化器,server 層,InnoDB,QA 等。
當(dāng)時(shí),我所在的 InnoDB 團(tuán)隊(duì)當(dāng)時(shí)有 base 在美國的 Calvin,Kevin,Jimmy,芬蘭的 o,澳大利亞的 Sunny,加拿大的 Innam,Michael,瑞典的 Mattias,印度的 Satya,保加利亞的 Vasil,再加上中國的我,一共十一個(gè)人卻來自八個(gè)不同的國家,是一個(gè)完全全球化的研發(fā)團(tuán)隊(duì)。團(tuán)隊(duì)里的每一個(gè)人都是經(jīng)驗(yàn)豐富的數(shù)據(jù)庫內(nèi)核程序員,比如:o 是 2003 年就加入 InnoDB 的資歷最深的大神,Sunny 是日后的 InnoDB manager,Kevin 也是曾經(jīng)參與過 Falcon 存儲(chǔ)引擎開發(fā)的老將,Jimmy 曾經(jīng)領(lǐng)導(dǎo)過 Sybase 的研發(fā)團(tuán)隊(duì)等等??梢愿敲炊啻罄幸黄鸸ぷ?#xff0c;實(shí)在是一件幸運(yùn)的事情。
2013 Team meeting in Shanghai右起:Jimmy,Yasufumi, Allen, Kevin, o, Shaohua, Mattias, Satya, Sunny, Vasil,Aditya, ??, Annamalai, Bin, Michael, ??, Krunal…
工作
在 InnoDB 工作,是一件非常開心的事情,因?yàn)榭梢栽诩疑习?。這對(duì)于一個(gè)每天需要接送孩子的家長來說,是非常難得的福利,另外也節(jié)省了大量的通勤時(shí)間,要知道,去一次 Oracle 在上海的辦公室,來回要兩個(gè)多小時(shí)的時(shí)間。
由于是一個(gè)全球化的團(tuán)隊(duì),而且,成員也比較有經(jīng)驗(yàn),所以,大家的工作方式也很特別。基本上是每個(gè)人都專注于自己的工作,相對(duì)比較獨(dú)立,需要合作的時(shí)候,通過 pigeon,郵件或電話溝通。每周會(huì)開一次周會(huì),大家各自匯報(bào)自己的工作進(jìn)展情況,并進(jìn)行討論。每年會(huì)組織一次 team meeting,大家從全球各地匯聚到一起,總結(jié)上年的工作,規(guī)劃明年的目標(biāo),談?wù)劺硐?#xff0c;聊聊人生。
在 MySQL,研發(fā)的流程非常規(guī)范。以一個(gè) bug 修復(fù)為例,大致要經(jīng)歷以下幾個(gè)步驟。
首先,需要根據(jù) bug report 來分析并復(fù)現(xiàn) bug,然后找到修復(fù)方法,經(jīng)過和 5 級(jí)大佬討論后,確定修復(fù)方案并通過 bzr 創(chuàng)建新的代碼分支。
編碼完成后,還需要?jiǎng)?chuàng)建對(duì)應(yīng)的 MTR test case,并和修復(fù)代碼一起,放到 reviewboard 上面請(qǐng)大佬 review。Review 的過程可能會(huì)持續(xù)好幾輪,因?yàn)橄?o 這樣的大神 review 的時(shí)候非常嚴(yán)謹(jǐn),不會(huì)放過任何一個(gè)出問題的細(xì)節(jié)。
Review 完成后,需要把要提交的代碼放到測(cè)試集群上面去測(cè)試。這個(gè)自動(dòng)化測(cè)試系統(tǒng)非常強(qiáng)勁,它會(huì)同時(shí)在多平臺(tái)上面編譯好 debug 和 release 版本,再并行測(cè)試。
測(cè)試完成,確認(rèn)沒有問題后代碼才能最終被合并到主干。
我的第一個(gè)提交以上只是一個(gè)簡(jiǎn)單的 bug 修復(fù)過程,而對(duì)于更為復(fù)雜的特性開發(fā),步驟還會(huì)包括前期的創(chuàng)建任務(wù) worklog,并在 worklog 里面相應(yīng)的填寫 HLD(High Level Design),LLD(Low Level Design)等設(shè)計(jì)內(nèi)容,并且開發(fā)原型等。
我做的check空間索引的特性worklog在 InnoDB 工作的六年時(shí)間里,我一共做了 461 次提交,做過的主要特性包括,InnoDB 支持空間索引,透明加密,新的數(shù)據(jù)字典等等,以下是其中一些 worklog 的列表:
WL\#6968 InnoDB GIS: R-tree index support WL\#6455 InnoDB: GEOMETRY datatypes support WL\#6745 InnoDB GIS: support DML operation for InnoDB R-tree Index WL\#7740 InnoDB GIS: Enhance Check Table for InnoDB Spatial index WL\#8548 InnoDB: Transparent data encryption WL\#9290 InnoDB: Support Transparent Data Encryption for Redo Log WL\#9289 InnoDB: Support Transparent Data Encryption for Undo Tablespaces WL\#9531 InnoDB_New_DD: Enable table encryption and transparent compression WL\#9535. InnoDB_New_DD: Remove InnoDB system table and modify the view of their I_S counterparts WL\#9537 InnoDB_New_DD: Support InnoDB table import/export for new DD在這六年里,自己感覺收獲了很多很多,體驗(yàn)到了 MySQL 這樣一個(gè)開源的數(shù)據(jù)庫軟件產(chǎn)品是如何進(jìn)行研發(fā)的整個(gè)過程,也了解了一個(gè)成熟的研發(fā)體系和國際化團(tuán)隊(duì)是如何運(yùn)作的。與國外大神們一起工作,不僅僅是學(xué)習(xí)到了知識(shí)和技能,也從他們身上發(fā)現(xiàn)了另外一種與我們完全不一樣的工作,生活,乃至思維方式。
離開
隨著互聯(lián)網(wǎng)公司的爆發(fā)式崛起,以及 MySQL 生態(tài)鏈的迅速發(fā)展,MySQL 團(tuán)隊(duì)的很多成員獲得了更好的發(fā)展機(jī)會(huì)而逐漸離開。而我也開始了和騰訊云數(shù)據(jù)庫 CDB 內(nèi)核 TXSQL 的不解之緣。巧的是,就在我離開 MySQL 不到一年,Oracle 宣布關(guān)閉中國研發(fā)中心。對(duì)于 Oracle 來說,面對(duì)著諸如亞馬遜,阿里,騰訊的強(qiáng)勢(shì)沖擊以及去 O 的浪潮,它將經(jīng)歷一段艱難的轉(zhuǎn)型期。而對(duì)于 MySQL 來說,在可預(yù)見的未來依舊會(huì)是 the world’s most popular open source database,身為曾經(jīng)的 MySQL 人,我也會(huì)在騰訊繼續(xù)助力 MySQL 的發(fā)展,通過 CDB 內(nèi)核 TXSQL 為 MySQL 生態(tài)鏈貢獻(xiàn)自己的力量。
PS:在后續(xù)的系列文章里,我將會(huì)陸續(xù)跟大家分享一些有意思的事情,讓大家更了解 MySQL 和它的騰訊版本 TXSQL,希望大家喜歡。
騰訊技術(shù)官方交流微信群已經(jīng)開放
進(jìn)群添加微信:journeylife1900
(備注:騰訊技術(shù))
總結(jié)
以上是生活随笔為你收集整理的我在 MySQL 的那些年的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新一代搜索引擎项目 ZeroSearch
- 下一篇: 一个即将写入MySQL源码的官方bug解