十分鐘成爲 Contributor 系列 | TiDB 向量化表達式活動第二彈

做者:Yuanjia Zhanggit

上篇文章 中,咱們介紹了 TiDB 如何實現表達式的向量化優化,以及社區同窗如何參與這項工程。兩週過去了,咱們收到了不少來自社區小夥伴們的建議和反饋,今天在這裏和你們分享一下活動進展和這些建議及反饋。github

活動進展

先來看看這兩週的活動進展吧。截至 9 月 30 日中午,全部 Issue 中須要向量化的函數簽名總共有 517 個,目前已完成 89 個,佔整體的 17%。其中絕大多數的函數簽名向量化都是由社區開發者們完成的,感謝你們的貢獻!bash

各種型函數簽名的完成度以下,咱們經過這幾個 Issue 來追蹤向量化的工做進展,歡迎你們去裏面挑選感興趣的,還未被其餘人認領的函數簽名去實現:架構

FAQ

Q1:前期開發過程當中,PR 很容易和主幹代碼衝突,如何解決?

A1:在前期的開發過程當中,咱們發現你們的 PR 衝突比較多,抱歉給你們的開發帶來了不便。目前該問題已由 PR/12395 解決。通過這個 PR 之後,全部表達式的開發接口和測試接口都被預先定義好了,避免了不一樣 PR 修改同一行代碼形成頻繁的衝突。你們後續開發時,能夠直接修改這些預先定義好的接口的內部實現,參考:PR/12400

Q2:如何讓測試框架只測試某個具體函數簽名?

A2:咱們在 PR/12153 中,支持了以命令行變量的方式,如 -args "builtinLog10Sig",讓測試框架只跑被指定的函數,方便你們進行測試,更具體的使用方法請見此 PR 內的說明。

Q3:如何計算結果向量的 Null Bitmap?

A3:在 TiDB 中,咱們使用一個 Bitmap 來標記 Column(也就是咱們的「向量」) 中某個元素是否爲 NULL,在向量化計算的函數中,常常會有以下處理 NULL 的需求:

for rowID := range rows {
    if child1.IsNull(rowID) || child2.IsNull(rowID) {
        col.SetNull(rowID)
        continue
    }
    // do something
}

複製代碼

上面的計算邏輯沒有正確性問題,可是不夠高效。在 PR/12034 裏面,咱們爲 Column 添加了一個 MergeNulls() 的接口,用於快速完成上面這段計算 NULL Bitmap 的過程。出於性能考慮,建議你們儘量使用這一接口來計算結果向量的 NULL Bitmap,示例以下:

col.MergeNulls(child1, child2)
for rowID := range rows {
    if col.IsNull(rowID) {
        continue
    }
    // do something
}
複製代碼

開發者社區

如上面所說,在表達式向量化優化過程當中的代碼絕大多數都是由社區開發者們貢獻的,具體來講是如下 Contributor(按照 PR 數排序,「*」 表示此次活動中新晉的 TiDB Contributor):

再次感謝社區夥伴們的大力支持!也恭喜新晉 Contributor,固然 TiDB Contributor 專屬馬克杯也已經準備好啦,社區運營小姐姐將會統一郵寄給你們,敬請期待!

在 TiDB 的 Expression Package 上,下面幾位同窗的 PR 貢獻數已經超過了 8 個(包括向量化相關的 PR),達到了 Active Contributor 的要求,他們分別是:jacklightChentsthghttangwzb41sh,也恭喜他們!

成爲 Active Contributor 以後,若是繼續爲 Expression Package 貢獻 PR,且合併的 PR 數量超過 20 個,就有機會得到提名成爲 Expression Package Reviewer。Expression Package 的 Reviewer 在技術上受到社區承認,其對 PR 的 review comments 具備技術公信力,能夠和 TiDB 工程師一塊兒 Review Expression 包的 PR,並擁有點讚的權限,固然還擁有持續發展成 TiDB Committer 的機會!

將來工做

上篇文章 中提到,咱們成立了 Vectorized Expression Working Group,並在 slack - tidbcommunity 中開放了 #wg-vec-expr 的公共 channel 供你們討論問題,歡迎感興趣的同窗參與進來一塊兒討論表達式計算的向量化優化。目前表達式向量化重構的工做還在繼續,歡迎各位新老 Contributor 持續的參與這項工程。

此外,咱們後續會優化升級 Community Organizer 組織架構,除了如今 Working Group 的組織之外,還會新增 Special Interest Group(簡稱 SIG),負責專門維護和開發 TiDB 中某些具體模塊,並將在國慶節後成立 Expression 的 SIG。屆時將邀請 Expression Package 中 Active Contributor 及以上角色的同窗參加。咱們會在 Expression SIG 中爲社區同窗提供詳盡的輔導,幫助 SIG 中的同窗在提高自我,知足本身興趣的同時,持續爲 TiDB 貢獻代碼,和 TiDB 一塊兒成長,敬請期待!

原文閱讀pingcap.com/blog-cn/10m…

相關文章
相關標籤/搜索