我的 2023 年,关于工作、开源、副业

工作

去年六月份加入到现在的公司,目前已经一年多了,今年全年的时间,逐步深入的参与到数据库内核的一些 feature 开发中来,做了非常多的事情,包括:

  • 支持数据库中的并发创建索引(Create Index Concurrently 和 Reindex Concurrently),主要是参考了 Postgres 的做法,达到的基本效果是在索引创建和重建期间,不阻塞数据表的 DML 操作
  • 为数据库引入了 pgvector 和 kafka fdw 插件,支持向量搜索和 Kafka 外部数据源
  • 还有一个重要的工作,在数据库中新增了 Create/Alter/Drop Task 的功能,主要是支持定时任务的执行
  • 当然还有最重要的,今年下半年开始参与,也是目前还在进行中的,那就是参与到公司数据库产品的存算分离中来,我们对传统的基于 Postgres 的 MPP 数据库的架构进行了大幅的调整,原来的 Postgres 进程充当了计算节点,不存储数据,支持计算集群 warehouse 的创建、水平扩展、高可用;将元数据进行了拆分,数据存储部分进行了全新设计,接入了对象存储,支持多种文件存储格式。
  • 目前也在设计和开发云原生架构下的一个重要功能,那就是 Time Travel, 支持访问一个数据表的任意时刻的历史数据。

总体来说,相较于去年,在内核方面有了更多的积累,当然数据库内核本身非常庞大、复杂、对技术能力要求较高,想要继续深入,需要花费不少的时间,希望在明年能够投入更多的时间去研究。

也非常感激我现在的 Team Leader,虽然他平时各种繁杂事务缠身,但总是耐心地给了我很多的帮助,不遗余力的引导我去解决工作中遇到的一些难题。

开源

今年在开源项目的运营方面,时间主要集中在年中的几个月,虽然投入精力比较有限,但是做出的改动却非常大。

img

rosedb 开始进入全新的 V2 版本,这主要是由于自己在数据库方面积累的知识越多,不得不重新开始审视自己之前做过的事情。 发现了很多 rosedb 之前的一些问题,并进行了一次大的重构。

主要是将原来 rosedb 之上的 Redis 数据结构的支持去掉了,并且重写了数据文件部分,目前 rosedb 专注于成为一个轻量级的 KV 存储引擎。

今年也收获了一些用户,开始有人将 rosedb 部署到生产环境中使用,看到自己写出的项目能够去解决实际的问题,是一种很不错的感觉。 star 数从去年的 3.5k 涨到了现在的 4.2k:

img

LotusDB 也一样,将原来的架构进行了大刀阔斧的改造,基本是完全重写了一遍,也发布了 V2 版本。

由于个人的精力有限,LotusDB 的重构工作,是在和两位社区小伙伴的共同努力下完成的。

LotusDB 的 star 也从去年的 1k 到现在的 1.9k,基本上翻了一倍。

img

明年针对 LotusDB 项目,我会打算组织团队运营,制定一些规范化的开发流程、文档、Release 日志、CI、Code Review 等等,就算做慢一点也没关系,主要是能够持续的运营下去。

今年也开源了两个新的项目,都是在重构 rosedb 和 LotusDB 的时候,抽取了一些通用的组件开发然后开源的。

一个是 WAL,Write Ahead Log,也就是预写日志,写这个组件的时候,是在重构 rosedb 期间,考虑到写日志是一个通用的需求,不仅 rosedb 会用到,LotusDB 也会用到,其他的基于 LSM 或者 Bitcask 的存储引擎,可能都会有这个需求。

于是我在五一假期期间,花了几个小时,写出了一个最初的版本开源了出去,后面也是按照实际需求在更新这个项目。

img

第二个是 diskhash,基于磁盘的哈希表,主要考虑到像 Bitcask 这种存储引擎,重启的时候需要去全量加载索引,数据量很大的话重启很耗时,于是我开发了基于磁盘的哈希索引结构,花了某个周末的一天时间开发然后开源。

img

但是后面并没有接入到 rosedb 中,因为改造起来比较繁琐,比我预想的麻烦得多,而且想到 rosedb 的定位,还是让它专注成为一个轻量、适合少量数据的引擎。

对于大数据量就可以使用 LotusDB,于是将 diskhash 接入到了 LotusDB 里面,使其成为了目前唯一一个支持 BTree 和 Hash 双索引的 KV 数据库。

在开源方面,其实今年有非常多的想法,但是无奈时间和精力有限,很多想法都搁置了。

比如我重构 rosedb 的时候,将原来的 Redis 数据结构拆了出来,原本是打算出一个新的开源项目,在 KV 之上去构建 Redis 的数据结构,并且支持 Redis 协议,底层就可以接入不同的 KV,比如 RoseDB、LotusDB、Pebble、Badger 等等,但是一直没时间去继续推进。

img

还有一个想法是基于 LotusDB 做一个搜索引擎项目,主要是对一个现有的项目进行改造,并且更换存储引擎,但是也搁置了。

img

还有其他的一些事情,比如写一个 Rust 的版本 WAL,运营 LotusDB 公众号,都因为没有太多的时间投入而全都搁置。

img

这些事情看明年的具体情况去抽取一些继续做了,如果有同学有兴趣做这些项目的话,可以联系我,我会给与你帮助与支持。

教程

今年还写了两个教程(付费),一个是《从零实现 KV 存储》。

主要是将我过去这几年,在存储引擎方面的知识进行了总结和回顾,并且从零开始,实现了一个兼容 Redis 数据结构和 Redis 协议的数据库,当然这个项目主要是出于教学的目的。

教程也帮助到了非常多的人,有的人拿去面试,获得了不错的 offer,有的人将学到的项目进行增强完善,开源出去也获得了成百上千 star,给自己的履历增加了一个很大的亮点。

https://w02agegxg3.feishu.cn/docx/Ktp3dBGl9oHdbOxbjUWcGdSnn3gw02agegxg3.feishu.cn

第二个教程是《从零实现分布式 KV》,和知名博主「青藤木鸟」进行合作,将自己之前的分布式相关的经验进行了系统的总结,并且基于 MIT 6824 课程,专注于代码实现层面。

对我自己来说也是一次总结输出,也希望这个教程能够帮助到更多的人,特别是这几年互联网就业环境非常不理想的情况之下。

https://av6huf2e1k.feishu.cn/docx/JCssdlgF4oRADcxxLqncPpRCn5bav6huf2e1k.feishu.cn


好了,这就是我在 2023 年做的一些事情,目前毕业已经四年多了,虽然做了不少自己感兴趣的事儿,但是对一些事情仍然感觉到迷茫、疑惑,甚至焦虑,或许这是人生之路上无法避免的吧。