2022年度总结

2022真是魔幻的一年,开年的时候怎么也没想到今年会在阳中结束这一年。正好在家养病没事做,遂写一篇年度总结,总结一下这一年的林林总总。

总得来说,比起去年,这一年在工作上投入的精力更多了一些。事情的起因要从去年7月说起。当时我刚完成了项目存储引擎TSDB的数据读取与计算的工作以及分布式join的工作。公司的CEO Davis找我说希望我能担任公司的研发副总监一职。当时我就慌了,我说我也不是谦虚,我怎么有能力承担这样一个角色?你们还是另请高明吧。但是呢,Davis讲“大家已经决定了”。后来我就念了一句成语,叫“当仁不让”。后来就觉得,在其位,谋其政,既然选择了接受这个职位,就应该认真做这个职位该做的事情,就投入了更多的精力到工作上。

这样的投入带来了一个最直接的“负面影响”就是今年刷的课明显比往年少了。去年我刷了三门课程,今年就只刷了一门课程: CMU的DLSys。这里不妨先介绍一下这门课程,以及给出我对它的评价。DLSys是CMU的Kolter和Tianqi两位老师共同执教的一门课程,其内容主要是深度学习系统的实现。学习了这门课程并完成它的作业,就会对pytorch这样的框架原理上是怎么实现的有一个基本的认识。两位老师从最基本的神经网络讲起,介绍了反向传播、自动求导、优化、normalization、dropout、CNN、GPU、训练大网络、LSTM、Transformer、部署和编译等内容。最重要的是,两位老师还介绍了这些内容的具体实现,并要求学生在作业中实现其中的大部分内容。这门课程还有一些很赞的implementation课程,就是两位老师step by step地带学生写代码实现一些功能,如卷积、LSTM、transformer等。**可以说,这门课程是目前学习深度学习系统的最佳资源。**与其他课程不同的是,这门课程不仅公开了所有的资源,甚至还对通过网络学习的学生做出了优化:Kolter和Tianqi专门为通过网络学习的学生录了所有的视频课程,并且还提供了一个供大家使用的论坛。当然,这门课也是有一些缺点的。比如其作业(尤其是最后几次的)的坑点不少,以及Lecture 22, Lecture 25和Lecture 26到现在也没有放出对应的视频。但瑕不掩瑜,我个人认为这门课还是挺值得感兴趣的同学学习一下的。说回来我现在一个做数据库的人为啥要学这门课程,主要原因是以前我是搞机器学习的,自己也改过TensorFlow、ncnn等框架的代码,所以对这方面有一些兴趣;而且我认为机器学习尤其是深度学习在未来几年内应该还是会保持很高的热度,我也对其与数据库的结合有一些兴趣。总之,欢迎大家点击了解。

当然,对工作上的投入也是带来了一些成效。最直接的数据是,我今年完成了1000多个jira,是公司完成jira数最多的人,占公司今年所有完成的jira的20%左右。考虑到我们研发部门有30多位同学,一个人能有这个产出还是相当可观的。

今年的工作大部分集中在计算引擎上。今年一方面是做了比较多的性能优化,比如将TSDB在特地场景下更新少量数据的性能从几十秒降到了30ms左右(从修改整个level file改成了append数据),将pivot by(DolphinDB独有的SQL语句,可以将单值模型的窄表转置为多值模型的宽表)在一些使用场景下的性能提升了40倍左右,将TSDB表的join的性能提升了10倍……另一方面在数据库立身之本的稳定性上花了比较多的时间,帮助系统大大提升了稳定性。最大的遗憾是今年没什么时间精力参与内存OLTP数据库的开发,感觉少学了不少东西。

在技术方面,自己也有了一些心得。这些心得说起来也不复杂。最大的一个心得是要抓住主要矛盾。例如,在实现一个系统的时候,设计方案时要尽量设计出一个简单可靠易维护的方案,实现前与实现完都要分析关键路径,在关键路径上做好性能优化,在非关键路径上注重简单易懂易维护。这样,设计出来的系统就会高效又稳定。

为了实现一些高性能的模块,也研究了一些开源的实现。这里直接给出对比的结论。首先是内存分配器,现在世界上最好的内存分配器当属微软的 mimalloc,具体的比对可以使用这个开源项目 mimalloc-bench。我觉得最神奇的是google开源的最新的 tcmalloc相对于较早的 gperftools的版本做了很多优化,如per CPU cache,但在这些benchmark上竟然还是老的版本会更优异一些……还研究了hash函数的实现,这个没啥可说的,最快的当属 xxHash。google的 abseil项目还提供了大量高性能的C++基础设施,这里就不赘述了,感兴趣的同学自己前往了解吧。

再讲讲自己认为自己做得最好的地方吧,我觉得是招人。我一直觉得招人对一家公司来说重要性极高,所以一直投入了比较多的精力在这个上面。今年的招人总体上我觉得还是比较成功的。校招方面,暑期实习的时候招了10来个实习的同学,其中也有放弃阿里云offer来dolphindb的同学,日常实习也招到了来自top2的选手,秋招的时候还招到了ACM金牌爷。社招上也招了几个不错的同学,比如有一位同学是从阿里钉钉跳槽过来的,进来之后表现也相当不错。招来优秀的同学的效果是立竿见影的,他们很快都有了不错的产出。这里也再打个广告,欢迎感兴趣的同学随时投递dolphindb。

也讲讲自己做得不是很好的地方吧,个人觉得是今年年初的时候对实习生的管理做得不是很好。当时招了比较多的实习生,但自己也有比较多的其他任务要做,对于有几位实习生就没有很花时间精力去带。后来在带暑期实习生和后面招进来的日常实习生的时候就特地注意了这一点,增多了在带实习生上的时间与精力的投入。总得来说,大家对这边的工作体验的认可度还是比较高的,详情可见这个知乎问题: 在dolphindb工作是一种怎样的体验?

讲完了工作,再讲讲生活上的感悟吧。最大的感悟就是健康真的很重要。疫情的来袭让我回想起了多年前身体虚弱飘摇的自己。其次是对付新冠的时候提醒大家不要吃含有咖啡因的感冒药。我买的感冒药是复方氨酚烷胺胶囊,这种感冒药的主成分是对乙酰氨基酚,这个没问题,但这种感冒药里有咖啡因(我也是后来才知道)。按照我的理解,这种药中放咖啡因的原因是为了提神,让吃了药的人即使在感冒中也有力气去干活,我称之为卷王感冒药。但是得了新冠之后,我觉得还是应该躺平睡大觉,应该吃泰诺这种含有助眠成分的感冒药。我吃了复方氨酚烷胺胶囊,退烧是很快,但是阳了的前两天我几乎都没睡着觉,相当痛苦。如果只能搞到这种含有咖啡因的感冒药,那我建议不要像我一样傻傻地睡前吃。

最后,希望自己在未来一年里能继续和优秀的人一起做有意思的项目。祝大家身体健康,新年快乐!

Avatar
Jinming Hu
Software Engineer

My research interests include machine learning, data mining, deep learning, computer vision, operating system, and database.