天天在知乎上装大佬给新手们指点迷津,告诉大家学习数据库技术的方法,今天就来聊聊虎哥是怎么进入数据库圈的,和 TokuDB 的故事。

TokuDB 又是个什么东东呢?

TokuDB 是一个“老古董“,在机械硬盘时代曾风靡一时,它有着不错的压缩,同时又兼具着不错的读、写能力,被各大厂用来解决容量+性能问题。

这个故事还得从 LevelDB 说起。

2011年,LevelDB 开放源代码,当时虎哥被这个清新的 kv 给吸引住了,很快就把它的源码翻了个底朝天,大概熟悉了这个 kv 的内部运行机制,从这个项目开始虎哥就正式开启了他的数据库之旅。

一边着手写原型,一边跟踪数据库技术的最新进展,当时虎哥把推上一些跟数据库相关的 tag 几乎都关注了,每天早上第一件事就是翻阅这些 tag 相关的推文,数据库这种高大上的技术太有吸引力了,每天都在琢磨着怎么能快速入门!

有趣的的事情是从 2012 年开始的,虎哥开始尝试实现 Skip List,然后琢磨怎么优化它,Skip List 玩腻了就开始玩 B-Tree,最后无聊到在饭馆门口等座的时候就可以写一个 B-Tree,当时想:数据库就这?于是决定再实现一个完整版的 kv ,项目代号 nessDB

在研发 nessDB 过程中,偶然发现了来自 MIT CSAIL 的《Cache-Oblivious B-Trees》系列,他们通过对 B-Tree 做一个常数项优化从而让整体 IO 大幅降低,基于这个想法他们创立了 TokuTek 这家公司,全力研发 TokuDB 产品,干活的基本都是老板们最得意的学生,3 个学生做研发,外加贝尔实验室的老手 Rik 做架构(这位老哥是个神人,能力非常了得,贝尔实验室硬核精神的体现者,目前已经退休,前段时间还邀请他加入我们的初创公司,由于家庭原因,暂时无法全职工作)。

当时 TokuDB 还是闭源产品,很多资料都是来自 TokuTek 官网以及老板们的几篇 Paper,2012 年底终于跟 TokuDB 主程 Leif 取得了联系,每周我们都会通过gtalk 进行沟通,在 Leif 专业的指导下,虎哥在 2013 年实现一个非常简化的 TokuDB(Fractal-Tree Index),感觉到达了人生的巅峰,走路姿势都不一样了,成为了掌握数据库核心技术的人!

2013 年 4月 22 号,TokuDB 正式开源,虎哥开始研究其源码,最后发现跟之前推测的差不太多,但是 TokuDB 为了集成到 MySQL 作为一个 Storage Engine,做了大量的工作,比如 tokudb-engine 就是对接 MySQL Plugin 层的,而真正核心的是 ft-index,一个基于 Fractal-Tree 实现的 kv 存储。

随后,虎哥由于工作需要就全面投入 TokuDB 的研发工作,先是给 TokuDB 实现了一个 hot backup,让 Xtrabackup 也可以热备 TokuDB 的数据,这个过程需要对 TokuDB 内核做一些改动,虎哥把这个思路同步给了 TokuTek,结果他们当时的VP Tim 给发了一份邮件:
Hey, send me your name/address, we owe you something as the "first TokuDB contributor"!

结果他们从美国给邮寄了一个 TokuMX 的T恤,TokuMX 是基于 TokuDB 的 MongoDB(当时的 MongoDB 还在使用 MMAP 苦苦挣扎,TokuMX 当时有不少用户),还有一个小小的 TokuDB 蓝色贴纸,上面简单的印着 “First TokuDB Contributor”。

虎哥内心是无比激动的,依然记得那个阳光明媚的下午,在繁华的 WFC 收到了一个被磨蜕皮的编织袋,由FedEx承运,这是来自大洋彼岸的关怀!

随后的一段时间内,开源 TokuDB 都是 TokuTek 在折腾,几乎没有社区可言,这种东西外人很难入手,而且他们的能力极强,重构一个大的模块几周就搞定,虎哥也孤独的维护着公司内部的 TokuDB 分支,修 bug,增加 feature。

2015 年 4 月份,虎哥盛情邀请 Leif 来中国,带他逛了一些知名景点,临走前一天,Leif 找了后海的一家酒吧,很豪情的说反正回到美国,换汇的人民币也用不着了,咱们不醉不归。

Leif 边点酒边介绍这个酒的味道以及在美国的欢迎度,每点一个新酒,自己先尝一口后再把口杯转 180 度,俩人整了半天,最后 Leif 透漏一个消息,TokuDB 已经被老板卖给了Percona,他们原班人马一个都不会过去,理由是 bla bla…,Google 给了他们团队发了 Offer,但他发誓这辈子再也不碰 Database 这个行业,说是太辛苦,看来 TokuDB 这个事情对他们伤害蛮大。

话说 TokuDB 被 Percona 收购后,很快成为了一个烂摊子,也慢慢停止维护,他们 CTO 也多次邀请虎哥加入,都被婉拒。

2016 年,虎哥和 Rik 成立了 XeLabs 组织,负责 TokuDB 版本的持续维护,这个版本被多家公司使用,稳定支撑着上万个 TokuDB 实例运行,最终由于精力有限,项目也逐渐停更,维护 MySQL 版本没那么容易,改一个小地方就需要做一堆测试,好歹 TokuDB 工程质量非常好,bug 已经很少,即使现在使用问题也不大,只是现在是 Cloud Database 的天下,很少有人再去部署 MySQL 了。

好了,这就是虎哥和 TokuDB 的故事。

虎哥还有和分布式数据库的故事,和数仓的故事,故事太多了,真惆怅。