工作
去年六月份加入到现在的公司,目前已经一年多了,今年全年的时间,逐步深入的参与到数据库内核的一些 feature 开发中来,做了非常多的事情,包括:
- 支持数据库中的并发创建索引(Create Index Concurrently 和 Reindex Concurrently),主要是参考了 Postgres 的做法,达到的基本效果是在索引创建和重建期间,不阻塞数据表的 DML 操作
- 为数据库引入了 pgvector 和 kafka fdw 插件,支持向量搜索和 Kafka 外部数据源
- 还有一个重要的工作,在数据库中新增了 Create/Alter/Drop Task 的功能,主要是支持定时任务的执行
- 当然还有最重要的,今年下半年开始参与,也是目前还在进行中的,那就是参与到公司数据库产品的存算分离中来,我们对传统的基于 Postgres 的 MPP 数据库的架构进行了大幅的调整,原来的 Postgres 进程充当了计算节点,不存储数据,支持计算集群 warehouse 的创建、水平扩展、高可用;将元数据进行了拆分,数据存储部分进行了全新设计,接入了对象存储,支持多种文件存储格式。
- 目前也在设计和开发云原生架构下的一个重要功能,那就是 Time Travel, 支持访问一个数据表的任意时刻的历史数据。
总体来说,相较于去年,在内核方面有了更多的积累,当然数据库内核本身非常庞大、复杂、对技术能力要求较高,想要继续深入,需要花费不少的时间,希望在明年能够投入更多的时间去研究。
也非常感激我现在的 Team Leader,虽然他平时各种繁杂事务缠身,但总是耐心地给了我很多的帮助,不遗余力的引导我去解决工作中遇到的一些难题。
开源
今年在开源项目的运营方面,时间主要集中在年中的几个月,虽然投入精力比较有限,但是做出的改动却非常大。
rosedb 开始进入全新的 V2 版本,这主要是由于自己在数据库方面积累的知识越多,不得不重新开始审视自己之前做过的事情。 发现了很多 rosedb 之前的一些问题,并进行了一次大的重构。
主要是将原来 rosedb 之上的 Redis 数据结构的支持去掉了,并且重写了数据文件部分,目前 rosedb 专注于成为一个轻量级的 KV 存储引擎。
今年也收获了一些用户,开始有人将 rosedb 部署到生产环境中使用,看到自己写出的项目能够去解决实际的问题,是一种很不错的感觉。 star 数从去年的 3.5k 涨到了现在的 4.2k:
LotusDB 也一样,将原来的架构进行了大刀阔斧的改造,基本是完全重写了一遍,也发布了 V2 版本。
由于个人的精力有限,LotusDB 的重构工作,是在和两位社区小伙伴的共同努力下完成的。
LotusDB 的 star 也从去年的 1k 到现在的 1.9k,基本上翻了一倍。
明年针对 LotusDB 项目,我会打算组织团队运营,制定一些规范化的开发流程、文档、Release 日志、CI、Code Review 等等,就算做慢一点也没关系,主要是能够持续的运营下去。
今年也开源了两个新的项目,都是在重构 rosedb 和 LotusDB 的时候,抽取了一些通用的组件开发然后开源的。
一个是 WAL,Write Ahead Log,也就是预写日志,写这个组件的时候,是在重构 rosedb 期间,考虑到写日志是一个通用的需求,不仅 rosedb 会用到,LotusDB 也会用到,其他的基于 LSM 或者 Bitcask 的存储引擎,可能都会有这个需求。
于是我在五一假期期间,花了几个小时,写出了一个最初的版本开源了出去,后面也是按照实际需求在更新这个项目。
第二个是 diskhash,基于磁盘的哈希表,主要考虑到像 Bitcask 这种存储引擎,重启的时候需要去全量加载索引,数据量很大的话重启很耗时,于是我开发了基于磁盘的哈希索引结构,花了某个周末的一天时间开发然后开源。
但是后面并没有接入到 rosedb 中,因为改造起来比较繁琐,比我预想的麻烦得多,而且想到 rosedb 的定位,还是让它专注成为一个轻量、适合少量数据的引擎。
对于大数据量就可以使用 LotusDB,于是将 diskhash 接入到了 LotusDB 里面,使其成为了目前唯一一个支持 BTree 和 Hash 双索引的 KV 数据库。
在开源方面,其实今年有非常多的想法,但是无奈时间和精力有限,很多想法都搁置了。
比如我重构 rosedb 的时候,将原来的 Redis 数据结构拆了出来,原本是打算出一个新的开源项目,在 KV 之上去构建 Redis 的数据结构,并且支持 Redis 协议,底层就可以接入不同的 KV,比如 RoseDB、LotusDB、Pebble、Badger 等等,但是一直没时间去继续推进。
还有一个想法是基于 LotusDB 做一个搜索引擎项目,主要是对一个现有的项目进行改造,并且更换存储引擎,但是也搁置了。
还有其他的一些事情,比如写一个 Rust 的版本 WAL,运营 LotusDB 公众号,都因为没有太多的时间投入而全都搁置。
这些事情看明年的具体情况去抽取一些继续做了,如果有同学有兴趣做这些项目的话,可以联系我,我会给与你帮助与支持。
教程
今年还写了两个教程(付费),一个是《从零实现 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 年做的一些事情,目前毕业已经四年多了,虽然做了不少自己感兴趣的事儿,但是对一些事情仍然感觉到迷茫、疑惑,甚至焦虑,或许这是人生之路上无法避免的吧。