我在 MySQL 的那些年

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

面试

2012 年的春天,阳光明媚,鸟语花香,我正在张江的一栋橙黄色的大楼里跟我的小伙伴们一起奋力的敲打着键盘,随着一阵轻柔的电话铃响起,手机屏幕上显示出一个陌生的号码,是不是又是骚扰电话,没管他,我接着敲自己的键盘。手机一直在震动着,好像催促着我,我拿起它,电话接通,那头传来一个非常轻柔而且职业化的女声,“你好,我是 Oracle 的招聘顾问 Amy,请问您现在方便吗?…”。我的职业生涯从此与 MySQL 发生了交集。

Amy 告诉我 MySQLInnoDB 团队有意在中国招聘合适的数据库内核工程师,问我有没有兴趣加入。我去,MySQL,theworld’s most popular open source database,邀请我加入?我想都没想就回答她,当然有,而且兴趣很大。Amy 是个非常专业的 HR,非常有效率的安排了我后面的面试事宜,怀着一丝忐忑和兴奋,我开始了进入 MySQL 团队的面试。

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

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

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

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

MySQL 的面试并没有想象中的那么多规则和高难度,前后 4 轮,基本都是聊天,主要围绕以前做过的事情和对数据库内核的理解。印象比较深的是三件事,一个是 Innam 的口音实在太重,加上从遥远的加拿大打过来,偶英语听力也的确水平不高,所以,好多问题都没听懂,当时是慌得一批。

另外一个是 o 用 google talk 问了一个如何发现事务死锁的问题,而且打字速度超级快,以至于我认为对面是个打字机器,直到见到他真人才发现,他就是一台没有感情的程序机器(其实,o 还是很有意思的一个人,后面的连载会介绍他的一些趣事)。Jimmy 的面试是在一个南京西路的咖啡厅里面进行的,两个人似曾相识一般聊了蛮久。Jimmy 是特别赞的一个人,很有亲和力。整个面试的流程总体感觉比较轻松,偶也没有刻意准备,或许真的是幸运。

团队

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

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

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

2013 Team meeting in Shanghai

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

工作

在 InnoDB 工作,是一件非常开心的事情,因为可以在家上班。这对于一个每天需要接送孩子的家长来说,是非常难得的福利,另外也节省了大量的通勤时间,要知道,去一次 Oracle 在上海的办公室,来回要两个多小时的时间。

由于是一个全球化的团队,而且,成员也比较有经验,所以,大家的工作方式也很特别。基本上是每个人都专注于自己的工作,相对比较独立,需要合作的时候,通过 pigeon,邮件或电话沟通。每周会开一次周会,大家各自汇报自己的工作进展情况,并进行讨论。每年会组织一次 team meeting,大家从全球各地汇聚到一起,总结上年的工作,规划明年的目标,谈谈理想,聊聊人生。

在 MySQL,研发的流程非常规范。以一个 bug 修复为例,大致要经历以下几个步骤。

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

编码完成后,还需要创建对应的 MTR test case,并和修复代码一起,放到 reviewboard 上面请大佬 review。Review 的过程可能会持续好几轮,因为像 o 这样的大神 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 这样一个开源的数据库软件产品是如何进行研发的整个过程,也了解了一个成熟的研发体系和国际化团队是如何运作的。与国外大神们一起工作,不仅仅是学习到了知识和技能,也从他们身上发现了另外一种与我们完全不一样的工作,生活,乃至思维方式。

离开

随着互联网公司的爆发式崛起,以及 MySQL 生态链的迅速发展,MySQL 团队的很多成员获得了更好的发展机会而逐渐离开。而我也开始了和腾讯云数据库 CDB 内核 TXSQL 的不解之缘。巧的是,就在我离开 MySQL 不到一年,Oracle 宣布关闭中国研发中心。对于 Oracle 来说,面对着诸如亚马逊,阿里,腾讯的强势冲击以及去 O 的浪潮,它将经历一段艰难的转型期。而对于 MySQL 来说,在可预见的未来依旧会是 the world’s most popular open source database,身为曾经的 MySQL 人,我也会在腾讯继续助力 MySQL 的发展,通过 CDB 内核 TXSQL 为 MySQL 生态链贡献自己的力量。

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

腾讯技术官方交流微信群已经开放

(0)

相关推荐

  • MySQL 体系架构简介

    松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程 前面三篇文章我们一起分析了外部环境对 MySQL 性能的影响,不过 ...

  • 扔掉,MySQL!性能被 MariaDB 吊打…

    MySQL的发展史 MySQL的历史可以追溯到1979年,它的创始人叫作Michael Widenius,他在开发一个报表工具的时候,设计了一套API,后来他的客户要求他的API支持sql语句,他直接 ...

  • mysql router是干什么的

    mysql router是干什么的_mysql router是什么 阿依图娜 2021-01-27 18:03:19  44  收藏 文章标签: mysql router是干什么的 版权 工程师小C的 ...

  • Python+MySQL随机试卷及答案生成程序

    一.背景 本文章主要是分享如何使用Python从MySQL数据库中面抽取试题,生成的试卷每一份都不一样. 二.准备工作 1.安装Python3 下载地址:https://www.python.org/ ...

  • UC头条:MySQL数据库定时备份到其他电脑

    最近我的一个学弟问了我一个问题,说他要实现一个功能,他老师给他提出来一个问题,让他的项目实现定时备份数据库到其他电脑,确保安全.他就来问我,还好我之前弄过,虽然我是干前端的,哈哈哈,之前学的比较杂. ...

  • Docker定时备份MySQL数据到七牛云

    前言:我Linux服务器安装了docker,docker容器跑了springboot项目,用到了mysql数据库.所以必须准备程序,数据备份功能,万一哪天系统挂了,数据丢了,我可以随时恢复.因为没钱开 ...

  • 面试被问MySQL 主从复制,怎么破?

    一.前言 随着应用业务数据不断的增大,应用的响应速度不断下降,在检测过程中我们不难发现大多数的请求都是查询操作. 此时,我们可以将数据库扩展成主从复制模式,将读操作和写操作分离开来,多台数据库分摊请求 ...

  • mysql进阶学习二之搭建主从

    前面说了主从复制的原理,现在我们搭建主从结构 1. 提前准备 我准备了两台主机,主节点是远程的centos7,从节点是本机windows 主从复制的原理在上一篇已经说了:主节点中mysql创建一个用户 ...

  • mysql进阶学习三之mycat读写分离和分库分表

    前面已经配置了mysql的主从复制,其实很容易,主节点写入了数据,从节点进行同步,所以写操作使用主节点,读操作使用从节点,这样就有效降低了数据库的压力 但是我们用java程序不可能去连接多个数据源,执 ...

  • VB远程访问MYSQL代码图解

    首先需要安装MySQL Connector/ODBC 地址:http://dev.mysql.com/downloads/connector/odbc/ 根据自己的系统(运行环境: Win7/XP/W ...

  • (9条消息) CentOS 8 设置 MySQL 8 允许远程访问

    (9条消息) CentOS 8 设置 MySQL 8 允许远程访问

  • MySQL Router 8 详解

    wzy0623 2019-09-03 15:35:32 版权 目录 一.功能介绍 1. 透明路由 2. 元数据缓存 3. 简单重定向 4. MySQL Router 8.0的新特性 二.安装与启动 1 ...