做了7年开源数据库开发,我学到了什么?

1、什么是rqlite?

rqlite 是一个用 Go 编写的轻量级、开源、分布式关系数据库,存储引擎采用了SQLite。刚开始写这个数据库的时候,我只是觉得好玩,但后来就非常认真了。

那么,在过去的 7 年里,我从开源数据库的开发中学到了什么?

2、一次只关注一个功能

有一次,我尝试重写HTTP服务层,并替换Raft共识子系统。这两项功能是同时开发的。

结果发现,工作量太大,引发了第二系统效应,最终我放弃了这些工作。我努力了好几个星期,才意识到这些实现过于庞大。于是,我学习到了宝贵的一课:变更越小越好,一次只关注一个功能。

如果需要新的设计和实现时,则可以考虑增量式的方法。尽可能保证定期发布,并尽快将更改合并到主分支。如果需要大量重写代码,由于没有明确的中间可交付成果,所以必须警惕这些变更是否符合实际的需求。

3、创造力是不稳定且不可预测的

大多数重要的功能都是我在周末添加的。

工作时间最好保持连续和高强度,能在几天内完成,如此一来,我在编写每一行代码之前,都可以在脑海中想象系统最终的样子。有一次,我利用一个周末重新设计并重新实现了HTTP API,并因此而促成了rqlite 2.0的发布。

还有一个周末,我修改了Raft日志,利用 Protobuf 编码替换掉了JSON。又在接下来的一个周末,添加了压缩。

然而,有时我会连续几个月什么都不做。直到今天,仍然是这样。我常常想,如果每一天都勤奋地在数据库上工作,那么一年的时间我应该能有非常大的进步。

4、测试的重要性

我相信广泛的测试覆盖率是高质量代码的保证。我收到用户报告说 rqlite 实例已经运行了一年多,而无需重新启动。

我一直在坚持测试金字塔的理念。你编写的测试用例应该尽可能接近实际代码。不要忽略测试各种失败的情况,也不要试图绕过错误。测试不会因为某个神秘的原因而失败,失败只是证明了你还没有完全理解自己构建的产品。

一定要使用集成测试作为冒烟测试,确保数据库确实能够启动,而且没有漏掉任何基本的东西。只有在没有其他办法时,才需要运行完整的软件实例,并运行端到端的测试。而这种情况本身也代表了实现中的一些问题:你的软件不够模块化,或者接口的正交程度不够。

单元测试非常关键。如果单元测试没有完成出色的覆盖率,则永远无法保证软件的高质量。

5、Go 经受住了时间的考验

Go 语言给我留下了深刻的印象,它一直是我最喜欢的编程语言。7年来,我使用Go语言编写了很多程序,我仍然非常喜欢它。rqlite的开发中间停顿了几个月,当再次打开代码时,我发现自己仍然没有忘记Go的使用风格和模式。

6、宣传非常艰难

我为了挑战自己而编写了一个数据库,我只是想试试看:我能否创建一个有趣的系统,并保证干净的设计和连贯的实现?以及高品质?我觉得我可以,而且事实证明我确实可以,这就够了。但是如果有人使用这个系统,那么我会特别欣慰。

然而,宣传非常艰难。这款产品曾多次出现在Hacker News上。我在Meetups也谈到过。而且7年以来,我在GitHub 上获得8千个赞。那么,这款产品究竟好不好用呢?我不知道。我应该关心吗?我也不知道。

7、编程很治愈

编程是我的谋生手段。我非常喜欢这个工作,但是编写自己的产品感觉还是不一样。作为团队的一员,在编写程序时,我们需要在编程风格、解决错误的策略、代码审查和功能优先级等问题上达成一致。作为一个团队,构建软件涉及大量编程以外的活动。

因此,建立自己的项目是一种解放。你可以自由决定编程风格、功能以及修复哪些错误。而且还不用参加会议。

这也说明了为什么多个开发人员一起工作的速度会减慢。如果只有一个人,一个愿景,那么就无需担心设计的连贯性和清晰度了。

写在最后

7年过去了,还有很多工作要做rqlite诞生已经7年了,但我还有很多工作要做。

我需要改进事务、客户端库、适当的 Kubernetes 支持以及性能等等,软件的魅力在于无限的扩展力,而且总有可以改进的地方。永远没有尽头。

文章来源:网络  版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

(0)

相关推荐

  • 什么是GO语言?适合做什么?

    众所周知,编程语言有很多,其中包含Java.Python.PHP.GO语言等,其他三种语言不用多说,很多人都知道也很了解,而对于GO语言大家却存在很大的疑问,不少人咨询小编说:什么是GO语言?GO语言 ...

  • GO语言主要应用领域有哪些?GO语言有什么优势?

    说起GO语言,很多人对它不是很了解,甚至不知道GO语言的应用领域有哪些,也不知道GO语言有什么优势,接下来小编通过下面这篇文章为大家详细解答一下. Go语言是谷歌2009发布的第二款开源编程语言,专门 ...

  • 【Go从学会到学废】(零) Golang简介

    Go 语言简介 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发, ...

  • 要不要入门学习Python培训课程,只需了解这几点!

    python作为编程语言,在现在人工智能越来越普及的时候,普通人会想是否要开始学习这门编程语言呢?作为普通人的话,有没有必要学习python培训课程呢?相信你看完小筑这篇你会有所收获. 什么是pyth ...

  • 做外贸行业如何利用海关数据开发客户

    在这里举个例子,但对任何行业都有参考价值 人人都说数据重要,那么,需要从这方面获得收益的货代公司,应该从什么时候开始关注数据?从公司成立初期吗?我认为,当然不是.公司早期,数据驱动是个伪命题,因为没有 ...

  • 做游戏开发需要学什么,小A同学分享!

    近几年来游戏行业发生了翻天覆地的变化,以至于很多人现在都想加入这个行业,这个行业给大家的第一感觉就是高工资,这无形之中就给游戏开发者蒙上一层很厉害的面纱.有的人为了换个环境,有的人是真心喜欢游戏这个行 ...

  • 想了解大厂如何做推荐?Facebook开源深度学习推荐模型DLRM

    DLRM 模型使用 Facebook 的开源框架 PyTorch 和 Caffe2 实现.DLRM 通过结合协同过滤和基于预测分析方法的原理,相比于其他模型有所提升,从而使其能够有效地处理生产规模的数 ...

  • 车载总线通信数据库开发工具 — VDE

    概述 INTEWORK-VDE(Vehicle Database Editor)是一款网络通信及数据库开发工具,支持车型平台.车型.网段等多个层级的通信系统设计,支持 CAN(FD).LIN.J193 ...

  • 毛小白:我希望大家多去做流量、做推广,多积累客户数据库,少点儿碰交付。

    早上开车去了趟广州办事,去的时候恰逢早高峰,车速蜗行.   在广州老城区开车,要比较小心.   因为老城区以前缺少道路规划,后面繁华起来车一多就非常拥挤,政府修了非常多的高架桥来缓解交通的堵塞.   ...

  • 开源FPGA开发板-OpeniCE例程更新说明

    地址:https://github.com/OpenFPGA-ICE/OpenICE https://github.com/OpenFPGA-ICE/OpenICE/tree/master/demo/ ...

  • Tabula Muris:小鼠单细胞开源数据库

    # 背景介绍 细胞是生物体的基本结构和功能单位,多细胞的生物进化出了具有不同功能的细胞类型,他们之间相互协作完成更复杂的生物功能.之前对于细胞类型的判断多是基于细胞的形态和表征,近来随着分子生物方法的 ...

  • CancerSEA:免费做单细胞测序分析的数据库

    #背景介绍 单细胞测序分析可以解决肿瘤异质性的问题,提高实验数据分析的准确性,对临床医生对疾病的诊断.检测.治疗提供非常有价值的帮助,也是现今生命科学研究的焦点.但测序费用的昂贵让很多怀着科研梦想的人 ...

  • 做免疫浸润,TIMER数据库真心好用!

    做肿瘤组织中免疫细胞的浸润评估有  CIBERSORT, quanTIseq, xCell, MCP-counter等算法.这些大多需要自己下载代码来进行分析.但是有一个人美心善的算法作者,把TCGA ...