我在MySQL的那些年(一)

做者 赖铮(Allen Lai) 前MySQL官方团队成员,专一数据库内核开发近二十年,前后就任于达梦,Teradata,北大方正以及MySQL InnoDB存储引擎团队,是达梦数据库内核,方正XML数据库,以及MySQL InnoDB的GIS支持,透明加密功能的主要开发者。现任腾讯TEG云架构平台部数据库团队专家工程师,负责腾讯云MySQL数据库内核的研发。程序员

image.png

Part1 相遇

2012年的春天,我正在张江的一栋橙黄色的大楼里,窗外的阳光很好,我跟个人小伙伴们正在一块儿奋力地敲打着键盘,随着一阵轻柔的电话铃响起,手机屏幕上显示出一个陌生的号码,“是否是又是骚扰电话?”没管他,我接着作本身的事情。可是手机一直在震动着,好像催促着我,我拿起电话接通,那头传来一个很是轻柔并且职业化的女声,“您好,我是Oracle的招聘顾问Amy,请问您如今方便吗…”。面试

个人职业生涯今后与MySQL发生了交集。数据库

Amy告诉我MySQL InnoDB团队有意在中国招聘合适的数据库内核工程师,问我有没有兴趣加入。MySQL是什么,the world’s most popular open source database,邀请我加入?我想都没想就回答她:“固然有,并且兴趣很大!”性能优化

Amy是个很是专业的HR,很是有效率的安排了我后面的面试事宜,怀着一丝忐忑和兴奋,我开始了进入MySQL团队的面试。架构

面试第一轮:InnoDB团队manager,Calvin。Calvin是数据库领域的专家,早年中科大毕业出国的那批牛人之一(后续的文章我会专门介绍MySQL的牛人们)。性能

面试第二轮:InnoDB性能优化专家Innam,Innam是缓冲池性能优化的做者。学习

面试第三轮:InnoDB大神Marko。Marko是InnoDB创始团队成员之一,存储引擎技术的大神级专家。测试

面试第四轮:InnoDB架构师Jimmy。Jimmy也是数据库内核的全能型专家,并且是以前是sybase内核团队的老大。优化

完整的一套流程走下来,其实MySQL的面试并无想象中的那么多规则和高难度,先后4轮,基本都是聊天,主要围绕之前作过的事情和对数据库内核的理解,在面试过程当中,让我印象比较深(比较有趣)的是三件事:google

一个是Innam的口音实在过重,加上从遥远的加拿大打过来,个人英语听力也的确水平不高,因此好多问题都没听懂,当时真的是慌得一批。

另一个是Marko用google talk问了一个如何发现事务死锁的问题,他的打字速度超级快,以致于我认为对面是个打字机器,直到见到他真人才发现,他就是一台没有感情的程序机器(其实,Marko仍是颇有意思的一我的,后面我会介绍他的一些趣事)。

最后,和Jimmy的面试是在一个南京西路的咖啡厅里面进行的,两我的似曾相识通常聊了好久,Jimmy是特别赞的一我的,颇有亲和力。整个面试的流程整体感受比较轻松,我也没有刻意准备,或许真的是幸运吧。

Part2 团队

就传统的软件企业来讲,MySQL的团队架构相对比较扁平化,层级不多,像我这样的基础员工,离Oracle最大的老板Larry Ellison也就隔了五层。这里面的缘由主要是Oracle收购MySQL后的很长一段时间里,基本保留了MySQL团队的原有架构和人员,只是作了一些简单接入。

整个MySQL分为好几个大的团队,有MySQL kernel,MySQL replication和MySQL NDB等等,这些大的团队里面又细分为若干小的团队,好比:MySQL kernel团队里面又分为优化器,server层,InnoDB和QA等。

当时,我所在的InnoDB团队里有base在美国的Calvin,Kevin,Jimmy,芬兰的Marko,澳大利亚的Sunny,加拿大的Innam,Michael,瑞典的Mattias,印度的Satya,保加利亚的Vasil,再加上中国的我,一共只有十一我的,却来自八个不一样的国家,是一个彻底全球化的研发团队。团队里的每个人都是经验丰富的数据库内核程序员,好比:Marko是2003年就加入InnoDB的资历最深的大神,Sunny是往后的InnoDB manager,Kevin也是曾经参与过Falcon存储引擎开发的老将,Jimmy曾经领导过Sybase的研发团队等等。能够跟那么多大佬一块儿工做,实在是一件幸运的事情。

2013 Team meeting in Shanghai

右起:Jimmy,Yasufumi, Allen, Kevin, Marko, Shaohua, Mattias, Satya, Sunny, Vasil,Aditya, ??, Annamalai, Bin, Michael, ??, Krunal…

Part3 工做

在InnoDB工做,是一件很是开心的事情,由于能够在家上班,这一点说出来相信就有不少人羡慕了,而这对于一个天天须要接送孩子的家长(我)来讲,更是很是可贵的福利,不只能够按照本身的节奏分配工做和生活的时间,另外也节省了大量没必要要的通勤时间,要知道,去一次Oracle在上海的办公室,来回要两个多小时的时间。

因为是一个全球化的团队,并且,成员也比较有经验,因此,你们的工做方式也很特别。基本上是每一个人都专一于本身的工做,相对比较独立,须要合做的时候,经过pigeon、邮件或电话沟通。每周会开一次周会,你们各自汇报本身的工做进展状况,并进行讨论。

除了周会,咱们每一年还会组织一次team meeting,你们从全球各地汇聚到一块儿,总结上年的工做,规划明年的目标,谈谈理想,聊聊人生。

在MySQL,研发的流程很是规范。以一个bug修复为例,大体要经历如下几个步骤:

首先,须要根据bug report来分析并复现bug,而后找到修复方法,通过和5级大佬讨论后,肯定修复方案并经过bzr建立新的代码分支。

编码完成后,还须要建立对应的MTR test case,并和修复代码一块儿,放到reviewboard上面请大佬review。Review的过程可能会持续好几轮,由于像Marko这样的大神review的时候很是严谨,不会放过任何一个出问题的细节。

Review完成后,须要把要提交的代码放到测试集群上面去测试。这个自动化测试系统很是强劲,它会同时在多平台上面编译好debug和release版本,再并行测试。

测试完成,确认没有问题后代码才能最终被合并到主干。

个人第一个提交

以上只是一个简单的bug修复过程,而对于更为复杂的特性开发,步骤还会包括前期的建立任务worklog,并在worklog里面相应的填写HLD(High Level Design),LLD(Low Level Design)等设计内容,而且开发原型等。

我作的check空间索引的特性worklog

在InnoDB工做的六年时间里,我一共作了461次提交,作过的主要特性包括,InnoDB支持空间索引,透明加密,新的数据字典等等,如下是其中一些worklog的列表:

WL#6968 InnoDB GIS: R-tree index support

WL#6455 InnoDB: GEOMETRY datatypes support

WL#6745 InnoDB GIS: support DML operation for InnoDB R-tree Index

WL#7740 InnoDB GIS: Enhance Check Table for InnoDB Spatial index

WL#8548 InnoDB: Transparent data encryption

WL#9290 InnoDB: Support Transparent Data Encryption for Redo Log

WL#9289 InnoDB: Support Transparent Data Encryption for Undo Tablespaces

WL#9531 InnoDB_New_DD: Enable table encryption and transparent compression

WL#9535. InnoDB_New_DD: Remove InnoDB system table and modify the view of their I_S counterparts

WL#9537 InnoDB_New_DD: Support InnoDB table import/export for new DD

在这六年里,本身感受收获了不少不少,体验到了MySQL这样一个开源的数据库软件产品是如何进行研发的整个过程,也了解了一个成熟的研发体系和国际化团队是如何运做的。与国外大神们一块儿工做,不只仅是学习到了知识和技能,也从他们身上发现了一些与咱们彻底不同的工做,生活,乃至思惟方式,这对我来讲也是一种很新奇的体验。

Part4 离开

随着互联网公司的爆发式崛起,以及MySQL生态链的迅速发展,MySQL团队的不少成员得到了更好的发展机会而逐渐离开。而我也开始了和腾讯云数据库CDB内核TXSQL的故事。

巧的是,就在我离开MySQL不到一年,Oracle宣布关闭中国研发中心。对于Oracle来讲,面对着诸如亚马逊,阿里,腾讯的强势冲击以及去O的浪潮,它将经历一段艰难的转型期。而对于MySQL来讲,在可预见的将来依旧会是the world’s most popular open source database,身为曾经的MySQL人,我也会在腾讯继续助力MySQL的发展,经过腾讯云MySQL的内核TXSQL为MySQL生态链继续贡献本身的力量。

PS:在后续的系列文章里,我将会陆续跟你们分享一些跟MySQL相关的有意思的事情,让你们更了解MySQL和它的腾讯版本TXSQL,但愿你们喜欢。

本文由博客一文多发平台 OpenWrite 发布!

相关文章
相关标签/搜索