一个菜鸟在Talent Plan的经历总结

大三本科生,做之前没有多少数据库方向的经验,妥妥菜鸟。5.1 跟着开幕式一起开始做Talent Plan,之后每天大概会规律地匀出2-3个小时在这上面,不过做了20多天之后停止了。总结了一下,想着就顺便发到社区里。

TinySQL:

Project1 是SQL和Encode,我觉得设计得还是挺好的,代码比较短,而且有相关源码解析文档,可以比较快的写出。

Project2 稍稍有点难,需要熟悉Yacc,AST之类的概念,而且要熟悉MYSQL编译解析的结果。不过尽全力还是可以麻麻虎虎写出,之后看源码也能理解的比较好。

Project3 开始就比较难了,这一章我是靠着源码 + Github上提供的文档一点点啃的,我相信对于普通的学生也没这个耐心和能力把Google Online Schema抽象的论文实现啃完并编程出来吧,而且TiDB的实现也是有不同之处的。但是这章比较好的地方在于编码量比较少,而且源码解析文章对相关变量描述的也比较清楚,学生还是可以独立完成这个项目。

Project4 是优化相关,我先是看15445了解查询器的各种优化,然后TiDB的源码文章。这章就很难了,一开始特别抽象。我认为理解优化过程花点力气是可以做到的,但是不看源码想通过测试基本不可能。因为涉及到太多api了,想要通过测试你必须写出正确的api,但是怎么知道要用哪些api呢?只有看源码,然后想着怎么搬过来,这是由tinysql的项目设计决定的,它必定要用到很多api。我不反对看源码文章,但是过多地面向源码编程对于学习是不利的,容易陷入复制粘贴的怪圈,尤其是tinysql是一个很大程度上基于TiDB的学习项目。我觉得可以提供给学生更多会用到的api的提示,并给出这些API的运用场景,由学生组合写出最终代码,这样学生独立写出来的几率比较大,学的也多。

Project5 也是跟Project4差不多的问题,api太多。这一章独立做了Hash Join和Hash Agg,花点时间是可以写出有意义的代码的,但是始终过不了测试。同时这2章遇到一些非常奇怪的问题,我把TiDB的源码复制过来依然通过不了测试(当然有做一些必要的修改)。这2章基本我做的方式就是自己照着Blog写-》过不了测试-》学源码,记API,然后照着源码写自己的实现-》依然过不了测试-》直接复制源码 -》依然过不了测试。这时候我感觉能新学到的东西就有限了,综合考虑把精力投入到了其他学习上(另外我给Vector那个part提了个小pr)。

另外还有就是有挺多链接和图片失效了,我会去社区里翻源码帖子来看,但是其他刚接触的同学会不会就很难说了。而且测试的标准有些描述不清,有时候不知道该用什么命令去测试,甚至不知道要测的函数具体在哪个文件夹,文件里面,这个最好再明确一下。

TinyKV:

我只做了前2章,也没有全部做完。我认为这个项目就不需要记忆太多api,有点像学校里6.824的那种感觉,不知道后面难度有没有飙升。当然也有缺点,比如说文档描述不清楚。不过这个也很正常,作为一个几乎全新的教学项目,慢慢丰富起来就行。以后非常有想法把这个做完。

总的来说还是项目还是很值得做,这一套做下来,我对数据库,分布式的理解更深了。不过确实有一些可以优化的地方,我也真实希望TiDB的开源社区能越办越好。

4赞

谢谢 @bowenxiaoCUHKSZ 非常中肯的反馈,期待一起把持续优化 Talent Plan 的课程!