做者:Yuanjia Zhanggit
在 上篇文章 中,咱们介绍了 TiDB 如何实现表达式的向量化优化,以及社区同窗如何参与这项工程。两周过去了,咱们收到了不少来自社区小伙伴们的建议和反馈,今天在这里和你们分享一下活动进展和这些建议及反馈。github
先来看看这两周的活动进展吧。截至 9 月 30 日中午,全部 Issue 中须要向量化的函数签名总共有 517 个,目前已完成 89 个,占整体的 17%。其中绝大多数的函数签名向量化都是由社区开发者们完成的,感谢你们的贡献!架构
各种型函数签名的完成度以下,咱们经过这几个 Issue 来追踪向量化的工做进展,欢迎你们去里面挑选感兴趣的,还未被其余人认领的函数签名去实现:框架
Date/Time builtin functions (7/65)函数
Decimal builtin functions (7/31)性能
Int builtin functions (22/187)测试
JSON builtin functions (1/27)优化
Real builtin functions (28/49)ui
String builtin functions (19/113)命令行
Duration builtin functions (5/45)
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 的要求,他们分别是:jacklightChen,tsthght,tangwz 和 b41sh,也恭喜他们!
成为 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 一块儿成长,敬请期待!
原文阅读:https://pingcap.com/blog-cn/10mins-become-tidb-contributor-20190930/