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

article/2025/10/3 15:41:03

作者 | PHILIP O'TOOLE,已获作者授权

译者 | 弯月      责编 | 欧阳姝黎

出品 | CSDN(ID:CSDNnews)

2016年4月9日,第一版rqlite(https://github.com/rqlite/rqlite/releases/tag/v1.0)正式发布,此时距离我写下第一行代码已经过去了两年。从那以后,我陆续发布了58个版本、关闭了277问题、处理了416个拉取请求、32,785 次插入和1954 次删除,总共修改了100多个文件。

什么是rqlite?

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

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

一次只关注一个功能

有一次,我尝试重写 HTTP 服务层(https://github.com/rqlite/rqlite/blob/master/DOC/DATA_API.md),并替换 Raft 共识子系统(https://raft.github.io/)。这两项功能是同时开发的。

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

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

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

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

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

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

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

测试的重要性

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

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

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

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

Go 经受住了时间的考验

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

宣传非常艰难

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

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

编程很治愈

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

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

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

7年过去了,还有很多工作要做

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

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

“老兵不死,只是会逐渐凋零”。—— 歌曲《Old Soldiers Never Die》

原文链接:https://www.philipotoole.com/7-years-of-open-source-database-development-lessons-learned/

声明:本文由CSDN翻译,已获作者授权,转载请注明来源。

☞华为:海思坚持研发尖端半导体,不会进行任何重组或裁员;荣耀50即将发布,预约人数破百万;Grafana 8.0发布|极客头条☞谷歌中巨大的 SEO 骗局!排名靠前的 HTML 编辑器也不可信
☞.NET 开源的免费午餐结束了?

http://chatgpt.dhexx.cn/article/mKqf9Xdo.shtml

相关文章

【数据库】什么是 PostgreSQL?开源数据库系统

文章目录 前言什么是 PostgreSQL?PostgreSQL 中的 SQL服务器管理接口 PostgreSQL 用途通用 OLTP:联合中心:地理空间:LAPP 堆栈: 使用 PostgreSQL 有什么好处?开源许可证:易于扩展:可…

这款免费开源的数据库工具,支持所有主流数据库!

Java技术栈 www.javastack.cn 关注阅读更多优质文章 DBeaver 是一个基于 Java 开发,免费开源的通用数据库管理和开发工具,使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。 由于 DBeaver 基于 Java 开发,可以运行在各种操作…

开源数据库管理系统DBeaver

简介 DBeaver dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具。 易用性是该项目的主要目标,是经过精心设计和开发的数据库管理工具。免费、跨平台、基于开源框架和允许各种扩展写作(插件)。 它支持任…

开源数据库的国际化思考与实践

整理 | 小雨青年 出品 | CSDN(ID:CSDNnews) 在全球开源技术掌门人高峰论坛上,PingCAP 联合创始人兼CTO 黄东旭分享了《开源数据库的国际化思考与实践》。 开源已死?不,还差得远 可能因为TiDB 是开源的&a…

一个比 ClickHouse 还快的开源数据库

开源分析数据库 ClickHouse 以快著称,真的如此吗?我们通过对比测试来验证一下。 ClickHouse vs Oracle 先用 ClickHouse(简称 CH)、Oracle 数据库(简称 ORA)一起在相同的软硬件环境下做对比测试。测试基准使…

Java开源数据库引擎,数据库计算封闭性的一站式解决方案

目录 前言引入一、数据库封闭性带来的问题?问题1: ETL变成ELT甚至LETETL:ELT: 问题2: 中间表带来的资源消耗和耦合问题3: 多样性数据源问题4: 存储过程带来的安全和耦合问题问题5: 大数据性能导致的尴尬 二、开放的SPL解决方式多样源直接计算…

比较适合物联网的开源数据库

物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。物联网数据的本质需要一种不同类型的数据库。以下是一些数据库,当与物联网一起使用时,会给出非常好的结果。 物联…

阿里巴巴开源的免费数据库工具Chat2DB

Chat2DB 是一款由阿里巴巴开源的免费数据库工具,它为开发人员提供了一个强大且易于使用的平台,用于存储和查询数据。与传统的数据库工具相比,Chat2DB 具有以下特点和优势: 多数据库支持:Chat2DB 可以与多种类型的数据库…

21款最优秀的开源数据库

摘要:几乎所有软件项目的开发都需要数据库的支持,目前,随着开源技术的迅速发展,越来越多的数据供应商选择开源数据库,为开源事业添砖加瓦。 作为一名软件开发人员或DBA,其中一份必不可少的工作就是与数据库…

一文带你了解开源数据库中的佼佼者 TOP 10

当今,大多数应用程序都需要在某个地方存储数据。对于 Web 应用程序,数据库是关键的“齿轮”。 很多企业和开发者在选择数据库时,会主要考虑的几个因素——一是它的成本,二是托管服务提供商的灵活性和支持力度。 出于多种原因&…

15个nosql数据库

1、MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案。当数据量达到50GB以上的时候,MongoDB的数据库访问速度是MySQL的10倍以上。MongoDB的并发读…

盘点2013:21款最优秀的开源数据库

作为一名软件开发人员或DBA,其中一份必不可少的工作就是与数据库打交道,比如MS SQL服务器、MySQL、Oracle、PostgreSQL、MongoDB等等。众所周知,其中MySQL是目前使用最广泛最好的免费开源数据库,此外,还有一些你不知道…

数据库设计学习总结

近期学习数据库也整理了一些笔记放上来供大家参考分享,相对来说比较基础。学习数据库个人觉得应该先把SQL语句熟悉了,然后再回头过来把数据库的整个设计过程强化下。别人说数据库设计(难度比较大)需要经验,可能吧&…

为什么要学习数据库以及数据库的选择

一、为什么要学习数据库 1.数据库概念 数据库(Database),就是暗转数据结构来组织、存储和管理数据,建立在计算机存储设备上的仓库。我们可以吧数据库看成电子化的文件库,也就是存储电子文件的处所,用户可以…

数据库学习资料和视频

数据库 博主在公众号后台设置了关键字回复, 回复下面的【】里面的内容, 可免费获得数据库视频和资料。 如回复:数据库 【数据库】 【1】oracle介绍和体系结构 【2】启动oracle服务和连接oracle数据库 【3】表的介绍和sqlplus相关操作 …

深度学习图像数据库总结(收藏用)

深度学习数据库总结 感谢感谢~收藏用! 原文出自:https://blog.csdn.net/chaipp0607/article/details/71403797 数据的准备工作是训练模型前的必要工作,显然这也是非常耗时的,所以在入门阶段我们完全可以用现有的开源图片库快速完…

数据库学习整理之常见运算符

运算符概述 1) 算术运算符 执行算术运算,例如:加、减、乘、除等。 2) 比较运算符 包括大于、小于、等于或不等于、等等。主要用于数值的比较、字符串的匹配等方面。 3) 逻辑运算符 包括与、或、非和异或、等逻辑运算符。其返回值为布尔型&#xff…

SQL Server 数据库学习

一、认识数据库 1、数据库的基本概念 2、数据库常用对象 3、数据库的组成 数据库主要由文件和文件组组成。数据库中所有的数据和对象都被存储在文件中。 二、创建数据库 1、创建数据库 对象资源管理器—数据库——右击——新建数据库 三、操作数据表与视图 1、创建数据表 空…

Access数据库学习

Access数据库学习 一. 新建数据库 二. 使用命令实现增删改查 直接增删改查命令增删改查查询 追加 更新 删除 新建Score表实现联合查询 喜欢的小伙伴可以尝试一下哦 这是小编公众号,请动动您可爱的小手手,关注一下💓&#x1f6…

推荐几个亲测好用高质量学习SQL的网站(建议收藏)

打开我的收藏夹,找出我曾经苦苦寻觅但却尘封已久的小网站—— 想什么呢,是正经学习SQL的网站,看完赶紧收藏学习起来! ①LintCode LintCode是我常用来刷算法题的网站,最近他们开发了一个SQL教程模块特好用&#xff0c…