我在MySQL的那些年(一)

做者 賴錚(Allen Lai) 前MySQL官方團隊成員,專一數據庫內核開發近二十年,前後就任於達夢,Teradata,北大方正以及MySQL InnoDB存儲引擎團隊,是達夢數據庫內核,方正XML數據庫,以及MySQL InnoDB的GIS支持,透明加密功能的主要開發者。現任騰訊TEG雲架構平臺部數據庫團隊專家工程師,負責騰訊雲MySQL數據庫內核的研發。程序員

image.png

Part1 相遇

2012年的春天,我正在張江的一棟橙黃色的大樓裏,窗外的陽光很好,我跟個人小夥伴們正在一塊兒奮力地敲打着鍵盤,隨着一陣輕柔的電話鈴響起,手機屏幕上顯示出一個陌生的號碼,「是否是又是騷擾電話?」沒管他,我接着作本身的事情。可是手機一直在震動着,好像催促着我,我拿起電話接通,那頭傳來一個很是輕柔並且職業化的女聲,「您好,我是Oracle的招聘顧問Amy,請問您如今方便嗎…」。面試

個人職業生涯今後與MySQL發生了交集。數據庫

Amy告訴我MySQL InnoDB團隊有意在中國招聘合適的數據庫內核工程師,問我有沒有興趣加入。MySQL是什麼,the world’s most popular open source database,邀請我加入?我想都沒想就回答她:「固然有,並且興趣很大!」性能優化

Amy是個很是專業的HR,很是有效率的安排了我後面的面試事宜,懷着一絲忐忑和興奮,我開始了進入MySQL團隊的面試。架構

面試第一輪:InnoDB團隊manager,Calvin。Calvin是數據庫領域的專家,早年中科大畢業出國的那批牛人之一(後續的文章我會專門介紹MySQL的牛人們)。性能

面試第二輪:InnoDB性能優化專家Innam,Innam是緩衝池性能優化的做者。學習

面試第三輪:InnoDB大神Marko。Marko是InnoDB創始團隊成員之一,存儲引擎技術的大神級專家。測試

面試第四輪:InnoDB架構師Jimmy。Jimmy也是數據庫內核的全能型專家,並且是以前是sybase內核團隊的老大。優化

完整的一套流程走下來,其實MySQL的面試並無想象中的那麼多規則和高難度,先後4輪,基本都是聊天,主要圍繞之前作過的事情和對數據庫內核的理解,在面試過程當中,讓我印象比較深(比較有趣)的是三件事:google

一個是Innam的口音實在過重,加上從遙遠的加拿大打過來,個人英語聽力也的確水平不高,因此好多問題都沒聽懂,當時真的是慌得一批。

另一個是Marko用google talk問了一個如何發現事務死鎖的問題,他的打字速度超級快,以致於我認爲對面是個打字機器,直到見到他真人才發現,他就是一臺沒有感情的程序機器(其實,Marko仍是頗有意思的一我的,後面我會介紹他的一些趣事)。

最後,和Jimmy的面試是在一個南京西路的咖啡廳裏面進行的,兩我的似曾相識通常聊了好久,Jimmy是特別讚的一我的,頗有親和力。整個面試的流程整體感受比較輕鬆,我也沒有刻意準備,或許真的是幸運吧。

Part2 團隊

就傳統的軟件企業來講,MySQL的團隊架構相對比較扁平化,層級不多,像我這樣的基礎員工,離Oracle最大的老闆Larry Ellison也就隔了五層。這裏面的緣由主要是Oracle收購MySQL後的很長一段時間裏,基本保留了MySQL團隊的原有架構和人員,只是作了一些簡單接入。

整個MySQL分爲好幾個大的團隊,有MySQL kernel,MySQL replication和MySQL NDB等等,這些大的團隊裏面又細分爲若干小的團隊,好比:MySQL kernel團隊裏面又分爲優化器,server層,InnoDB和QA等。

當時,我所在的InnoDB團隊裏有base在美國的Calvin,Kevin,Jimmy,芬蘭的Marko,澳大利亞的Sunny,加拿大的Innam,Michael,瑞典的Mattias,印度的Satya,保加利亞的Vasil,再加上中國的我,一共只有十一我的,卻來自八個不一樣的國家,是一個徹底全球化的研發團隊。團隊裏的每個人都是經驗豐富的數據庫內核程序員,好比:Marko是2003年就加入InnoDB的資歷最深的大神,Sunny是往後的InnoDB manager,Kevin也是曾經參與過Falcon存儲引擎開發的老將,Jimmy曾經領導過Sybase的研發團隊等等。能夠跟那麼多大佬一塊兒工做,實在是一件幸運的事情。

2013 Team meeting in Shanghai

右起:Jimmy,Yasufumi, Allen, Kevin, Marko, Shaohua, Mattias, Satya, Sunny, Vasil,Aditya, ??, Annamalai, Bin, Michael, ??, Krunal…

Part3 工做

在InnoDB工做,是一件很是開心的事情,由於能夠在家上班,這一點說出來相信就有不少人羨慕了,而這對於一個天天須要接送孩子的家長(我)來講,更是很是可貴的福利,不只能夠按照本身的節奏分配工做和生活的時間,另外也節省了大量沒必要要的通勤時間,要知道,去一次Oracle在上海的辦公室,來回要兩個多小時的時間。

因爲是一個全球化的團隊,並且,成員也比較有經驗,因此,你們的工做方式也很特別。基本上是每一個人都專一於本身的工做,相對比較獨立,須要合做的時候,經過pigeon、郵件或電話溝通。每週會開一次週會,你們各自彙報本身的工做進展狀況,並進行討論。

除了週會,咱們每一年還會組織一次team meeting,你們從全球各地匯聚到一塊兒,總結上年的工做,規劃明年的目標,談談理想,聊聊人生。

在MySQL,研發的流程很是規範。以一個bug修復爲例,大體要經歷如下幾個步驟:

首先,須要根據bug report來分析並復現bug,而後找到修復方法,通過和5級大佬討論後,肯定修復方案並經過bzr建立新的代碼分支。

編碼完成後,還須要建立對應的MTR test case,並和修復代碼一塊兒,放到reviewboard上面請大佬review。Review的過程可能會持續好幾輪,由於像Marko這樣的大神review的時候很是嚴謹,不會放過任何一個出問題的細節。

Review完成後,須要把要提交的代碼放到測試集羣上面去測試。這個自動化測試系統很是強勁,它會同時在多平臺上面編譯好debug和release版本,再並行測試。

測試完成,確認沒有問題後代碼才能最終被合併到主幹。

個人第一個提交

以上只是一個簡單的bug修復過程,而對於更爲複雜的特性開發,步驟還會包括前期的建立任務worklog,並在worklog裏面相應的填寫HLD(High Level Design),LLD(Low Level Design)等設計內容,而且開發原型等。

我作的check空間索引的特性worklog

在InnoDB工做的六年時間裏,我一共作了461次提交,作過的主要特性包括,InnoDB支持空間索引,透明加密,新的數據字典等等,如下是其中一些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

在這六年裏,本身感受收穫了不少不少,體驗到了MySQL這樣一個開源的數據庫軟件產品是如何進行研發的整個過程,也瞭解了一個成熟的研發體系和國際化團隊是如何運做的。與國外大神們一塊兒工做,不只僅是學習到了知識和技能,也從他們身上發現了一些與咱們徹底不同的工做,生活,乃至思惟方式,這對我來講也是一種很新奇的體驗。

Part4 離開

隨着互聯網公司的爆發式崛起,以及MySQL生態鏈的迅速發展,MySQL團隊的不少成員得到了更好的發展機會而逐漸離開。而我也開始了和騰訊雲數據庫CDB內核TXSQL的故事。

巧的是,就在我離開MySQL不到一年,Oracle宣佈關閉中國研發中心。對於Oracle來講,面對着諸如亞馬遜,阿里,騰訊的強勢衝擊以及去O的浪潮,它將經歷一段艱難的轉型期。而對於MySQL來講,在可預見的將來依舊會是the world’s most popular open source database,身爲曾經的MySQL人,我也會在騰訊繼續助力MySQL的發展,經過騰訊雲MySQL的內核TXSQL爲MySQL生態鏈繼續貢獻本身的力量。

PS:在後續的系列文章裏,我將會陸續跟你們分享一些跟MySQL相關的有意思的事情,讓你們更瞭解MySQL和它的騰訊版本TXSQL,但願你們喜歡。

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索