背景
这篇主要写个中文社区里希望上手开发的工程师或者大学生朋友们,期待他们可以快速上手Postgres或者Greenplum的开发和调试。我本人2017年7月入职Pivotal从事Greenplum开发,实话实话,上手过程非常痛苦,可能跟一开始接触的项目有关,大概得有将近一年才初窥门径。回顾起来,怎么看都太慢了。
尔后,疫情期间,我指导曾经助教的学生Hack Postgres | Greenplum,用结对编程的模式,zoom录屏的方式,他极快的上手了开发。并且短时间内就给Greenplum提交了两个Patch,给Postgres提交了一个Patch(PostgreSQL v13 release的致谢名单里就有他的名字)。再后来,我又把资料给一个大龄程序员,他诊断和阅读代码的能力不错,故而也很快上手,给Greenplum提交了若干Patch并且发现了一个比较重要的方向。这些Patch都并不是Naive的Patch,都是很有用并且涉及知识点比较广的问题。还有就是今年带的一个实习生,也是大概2-3周就给Greenplum提交了一个Patch,使得Greenplum 7的OLTP性能飙升(当然不是完全属于他的独立的工作)。
上述经历和尝试,证明了,只要有扎实C语言功底,就可以快速上手。其他的遇到了再学,各个深入即可。
如何上手
打造开发环境
Postgres和Greenplum没有任何秘密,前提是你会用gdb调试。打造一个编译的开发环境,并且能用gdb attach进程跟踪,是破冰的第一步,至关重要。完成了这一步,数据库就没有任何秘密。
请参考这部分资料:
链接: https://pan.baidu.com/s/1hduKo8DxQ6tdUOZzxVfWyA 密码: 8nrn
–来自百度网盘超级会员V5的分享
完成这一步,一定要能用gdb去attach到相应的进程,并设置断点,调试。其中C和gdb相关的知识需要自己额外学习和训练。
架构和宏观知识
这部分可以看看下面两个分享,有一些概念可能已经不匹配最新的master branch,但大致还不错。另外会有一些数据库方面的技术资料推荐。
链接: https://pan.baidu.com/s/1MIIOVtck-sJAoW7D2zz9Jg 密码: gkuo
–来自百度网盘超级会员V5的分享
链接: https://pan.baidu.com/s/1mSTU44J9yNtaPFPI4hsD0w 密码: i7bw
–来自百度网盘超级会员V5的分享
另外推荐一本Pivotal前同事的书籍,PostgreSQL技术内幕:查询优化深度探索 可以先只看前三章,了解一些数据库结构和例子,然后能用gdb跟踪一些信息。
开发从修复issue开始
看完了上面的资料后,就可以找一些issue入手了。我本人会经常诊断一些github上的issue,不着急修复的我并不急着去修复,任何人有兴趣,那些都是很好的入手学习资料。修复issue还可以成为贡献者,对简历也是非常重要的加强。当你研究完成前面的知识后,可以考虑找一些issue。
写在最后
VMware的Greenplum原厂团队已经给出版社提交了一本内核开发的书籍,写得很好,出版后大家可以关注参考。
另外Greenplum中文社区,后面会考虑出一个系列,面向开发者,一步一步用结对编程的方式,分享技术开发的内幕。
对于新上手的同学,请问对于如何选择上手项目有没有经验分享呢?
我感觉是如果有C基础,会用gdb,上手就不会太慢。从优化器的某个小问题上手是我目前仅有的几次经历,看起来都还不错。可能有几个原因:优化器只需要调节一个进程,然后效果可以容易看出来,且和SQL直接相关。或者是锁相关的,因为等候起来,gdb总是容易attach进去。
然后再就是平时Github上的Issue比较小的,又没有商业客户报告的,就看一眼不是大问题就自己不修复(蕾丝自己就只做个诊断),然后在时机合适的时候,给新人看看。
有一种结对编程的模式特别好。就是用zoom录屏,一起编程。有两三次后效果就还不错。
经验比较有限。仅供参考。