凌云时刻

以下文章来源于CSDN ,作者PHILIP O'TOOLE,译者 | 弯月,责编 | 欧阳姝黎

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》

你可能还想看

1. “字节云”火山引擎发布,对外开放推荐算法等核心技术

2. 入云!离开张一鸣的字节,做出了第一个重大决定

3. Android 杀后台太狠,谷歌:看不下去了,势必要揪出“凶手”!

4. 不想买Xbox?没关系,微软正打算让你在电视上也能玩游戏

5. 1.45亿元!甲骨文中标中国邮政储蓄银行数据库项目

END

每日收获前沿技术与科技洞见

投稿及合作请联系邮箱:lingyunshike@163.com

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

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

    作者 | PHILIP O'TOOLE,已获作者授权 译者 | 弯月      责编 | 欧阳姝黎 出品 | CSDN(ID:CSDNnews) 2016年4月9日,第一版rqlite(https:/ ...

  2. 比较3个开源数据库:PostgreSQL,MariaDB和SQLite

    在现代企业技术世界中,开源软件已牢固地确立了自己作为不可忽视的最大力量之一的地位. 毕竟,由于开源运动的出现,出现了一些最大的技术发展. 不难理解为什么:尽管基于Linux的开源网络标准可能不像专有选 ...

  3. 机器学习模型开发必读:开源数据库最全盘点

    开发 AI 和机器学习系统从来没有像现在这样方便.类似于 TensorFlow.Torch 和 Spark 这样的开源工具,在 AI 开发者群体中已是无处不在.再加上亚马逊 AWS.Google Cl ...

  4. Hypersonic SQL开源数据库方向比较流行的纯Java开发的关系型数据库

    Hypersonic SQL Hypersonic SQL开源数据库方向比较流行的纯Java开发的关系型数据库.好像不是JDBC兼容的,JDBC的很多高级的特性都没有支持,不过幸好支持ANSI- 92 ...

  5. 想做开源软件开发谁能带一下呀

    2019独角兽企业重金招聘Python工程师标准>>> 想做开源软件开发谁能带一下呀 转载于:https://my.oschina.net/u/200898/blog/130024

  6. 墨天轮访谈 | 叶金荣:GreatSQL开源社区——做中国广受欢迎的开源数据库

    分享嘉宾:叶金荣 万里数据库开源生态负责人 整理:墨天轮社区 导读 大家好,我是来自万里数据库的叶金荣,GreatSQL开源社区的愿景是做中国广受欢迎的开源数据库,这也是我今天分享的主题. Great ...

  7. openGauss开源数据库二次开发指导手册(上)

    简介 openGauss是开源关系型数据库,采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展. 本实验主要描述如何对openGauss开源数据库进行二 ...

  8. mysql开发是做什么_数据库开发是做什么东西的

    展开全部 数据库开发工程师(Database Developer)是从事数据库管理系统62616964757a686964616fe58685e5aeb931333365663565(DBMS)和数据 ...

  9. 开源数据库技术分享及未来展望|CIC 真·全明星阵容

    从 60 年代中期开始到现在,随着计算机硬件技术的进步和互联网技术的发展,数据库也在一次次技术浪潮中不断地演化,现在已成为世界上最重要的基础设施之一. 1998 年,业界正式提出了 开源 概念,开源运 ...

  10. 开源数据库该怎么玩?

    9月13日,北京,巨杉数据库主办的"极客Cool" 沙龙第一期圆满结束.沙龙上,开源数据库的三个重要代表SequoiaDB巨杉数据库CTO王涛(NoSQL),阿里云RDS for ...

最新文章

  1. turbolinux mysql 5.0 cluste,Debian -- 新聞 -- Debian GNU/Linux 5.0 發布
  2. 解决centos ping不通外网
  3. 使用qrcode类制作二维码
  4. 深度学习—大厂笔试题
  5. MSSMS18闪退解决方法
  6. 更改SQL数据库的繁体数据为简体
  7. bootstrap中日历组件只显示年月
  8. 《数字图像处理 第三版》(冈萨雷斯)——第十一章 表示和描述
  9. codeblocks安装包和主题及中文语言包百度云下载
  10. 摄动理论求解非线性单摆振动问题
  11. 总结陈丹琦博士论文(一):NEURAL READING COMPREHENSION AND BEYOND
  12. Mystical compositions of the self: women, modernism, and empire【翻译】
  13. 【Trailhead题目解析】Prepare your salesforce org for users - 5Create Chatter Groups
  14. PostGIS教程十一:空间索引
  15. java的关键业绩指标_SpreadJS前端开发案例:如何利用Javasrcipt创建财务关键业绩指标表...
  16. SuperMap iDesktop常见问题解答集锦(七)
  17. 对计算机基础的期末总结,计算机期末总结
  18. 计算机科学速成课学习
  19. 个人计划日程提升系统APP的设计与实现
  20. PDF打开正常打印后却被放大,如何调整到正常?

热门文章

  1. HDU 2258 Continuous Same Game
  2. 电信基础设施共建共享
  3. linux最常用命令
  4. Ant-编译构建(1)-HelloWorld
  5. 大象跳舞系列之Spark on HDInsight (1)
  6. python 字典的函数
  7. ArcEngine中放大、缩小、移动等功能实现的方法
  8. 信息系统管理工程师考前复习笔记一
  9. report 和report on的区别
  10. latex放一张大图在作者和正文之间