社區 | 如何優雅降落到 TiDB 星球?

提到「開源項目 TiDB」人們老是習慣性反應:它在 GitHub 上 Star 數已經超過 17000,並擁有 260+ 位全球各地的 Contributors 。但數據總歸是冷冰冰的,不能生動的展示 TiDB 社區的魅力。因此今天推送一篇 TiDB contributor 杜川同窗加入 TiDB 社區先後的「心路歷程」,他從親歷者的角度告訴你——數據庫

  • PingCAPer 夠 nice 麼?
  • 積極參與 TiDB 社區對本身的能力提高有何幫助?
  • 如何在 TiDB 星球上找到最適合本身的落點?( 或者在大樹上找到本身最擅長的「小樹杈」hhhhhh)
  • 以及…利用好碎片時間,你也能夠一年給 TiDB 提 70 個 PR!

** 做者:杜川,TiDB contributor**微信

最近這一年多斷斷續續一直在往 TiDB 中提交一些修改,前兩天看了一些 GitHub 提交記錄,發現居然已經累計了 70 來個 PR 了。考慮到最近這一年基本處於瘋狂加班的節奏,另外忙裏偷閒還基本上刷完了以前列的十幾本書的讀書清單,我以爲這也算一個不大不小的成就吧,值得 mark 一下。框架

話說回來,雖然我 17 年年中才開始給 TiDB 提交 PR,其實在以前一年多之前,大概在 2016 年 4 月份左右, 就據說過 TiDB 這個項目了。當時個人主要工做也是車一個 SQL 執行引擎,因此對分佈式數據庫業界的相關新聞仍是比較關注的。分佈式

雖然數據庫是一個輪子高發領域,各類輪子五花八門,可是在國內,數據庫,特別是分佈式數據庫這塊的輪子,基本仍是幾個大廠在車,要麼不開源,要麼開源了社區也不甚活躍。像 TiDB 這樣要從頭車一個分佈式數據庫,而且仍是徹底開源的方式來搞,確實讓我印象深入。後來組裏一個小哥離職投奔 PingCAP,我藉着面基的名義陸陸續續參加了 TiDB 幾回線下 Meetup,也由此認識了不少 TiDB 社區的小夥伴。函數

16 年末從北京回到成都之後,工做重心發生了一些變化,從以前的純作 infra,轉變爲更多地要面對業務層面的需求。不過作了幾年 infra,本身自己對數據庫內核仍是很感興趣的,因此工做之餘,開始研究 TiDB 的實現,而且搭了一套 TiDB,在開發環境裏代替 MySQL。咱們都知道,MySQL 通過多年的發展,其 SQL 語法是比較複雜的。TiDB 雖然全面兼容 MySQL 的語法和協議,可是由於沒有複用 MySQL 代碼,確定不可能作到 100% 兼容,落實到一些具體的語句上,確定會和 MySQL 有一些區別。由於以前我也一直在作 OLAP 系統的 SQL 引擎的開發工做,對這一塊比較熟悉,在遇到這方面問題後,感受解決起來也並不很麻煩,所以慢慢開始在這個方面給 TiDB 提一些 PR。到後面熟悉了之後,有時間的話也會到 TiDB 的 issue list 上撈相關的 issue 解決,主要集中於 SQL Parser, 表達式計算和 MySQL 兼容性等方面。最近抽空在作的是和聚合函數相關的一些 Feature。測試

由於平時工做仍是比較忙,加班也是屢見不鮮,所以給 TiDB 提交 PR,回覆 Review 意見的時間段基本都集中在週末,晚上老婆睡覺之後,或者午休間隙。這樣有一個問題是時間段比較離散,很難有長時間的連貫思考的時間。所以現階段一方面我在提 PR 的時候會選擇一些相對較小,獨立一些的 Feature。另外一方面,我儘可能把開發放在時間相對充裕的週末,把晚上和其餘零碎時間用來查看和回覆 Review 意見,Update 代碼和跑回歸測試。這樣算下來,平均提交一個 PR,算上開發,測試,和社區小夥伴溝通,大概要消耗 3 到 5 個工時。優化

不過這個時間投入我以爲卻是很是划算,一是由於我自己對數據庫就很是感興趣,把參與 TiDB 社區開發當成了一種興趣,能夠看作是工做之餘的一種放鬆,二是我一直在從事數據庫相關的工做,包括以前 OLAP SQL 引擎的運行時優化相關工做,和如今雲數據庫相關的工做,其實和在社區所作的事情都是密切相關的。好比一個 MySQL Builtin 函數, 在各類極端輸入下的表現是怎樣的,或是 SQL_MODE 的各類組合對這個 Builtin 函數的行爲有什麼樣的影響,這些問題在平時工做中,我可能很難考慮得很是周全;可是要在社區中提一個 PR 實現這個 Builtin 函數,我就非得把這些問題考慮清楚,並經受社區小夥伴各類 Case 的轟炸考驗。等這個 PR 順利被 Commit,這些細節我也爛熟於心了。ui

image

說到社區,我以爲 TiDB 作得至關不錯。一方面 PingCAPers 都很活躍,在 GitHub 上提的 Issue 通常很快就能獲得回覆, 有什麼疑問經過 GitHub, 微信羣甚至知乎提問等很快都能獲得反饋;另外一方面更重要的是在 Review PR 的時候社區小夥伴能保持比較嚴謹的態度。事件

就個人經歷而言,我在開發過程當中沒有注意到的一些 Corner Case 和細節錯誤,基本都能在 Review PR 過程被翻出來,這不只須要 Reviewer 理清楚 PR 對應 Feature 的相關細節,構造出可能有問題的場景,還須要 Reviewer 理解 PR 做者的開發思路。其中須要花費的精力,經常不低於開發這個 Feature 自己。此外,還有一個我以爲很讚的方面是 TiDB 花了不少心思來構建從 UT,FT 到集成測試的一系列測試框架,讓我在參與開發工程中比較容易對本身開發的 Feature 進行各個方位的測試,節省了不少來回搗騰的麻煩。開發

總的來講,參與 TiDB 社區是一件很是有意思的事情,給我帶來不少收穫,我也會繼續關注 TiDB 項目的進展。短期來看,個人計劃主要仍是抽空完成手頭聚合函數相關的一些 Feature,包括對 MySQL 聚合函數 STDDEV,VARIANCE 等的支持,以及在 TiKV Coprocessor 側的對應改動。以後,我打算看看能不可以結合我以前在 OLAP SQL 引擎的運行時優化方面的經驗,提高 TiDB 在 OLAP 領域的能力。不過這個是一個比較大的目標了,到時候還要和社區的小夥伴多多討論。

TiDB 社區大事件

TiDB TechDay2018 即將於 7 月 28 日在深圳舉辦,目前報名已滿,咱們週六見哦!點擊【這裏】查看活動詳情。P.S 歡迎踊躍勾搭 TiDB Robot (微信號:tidbai)加入 TiDB 星球~

相關文章
相關標籤/搜索