安德鲁·阿特金森:可维护播客——可维护的数据库?🎙️

💡 原文英文,约1600词,阅读约需6分钟。
📝

内容提要

最近,我在Maintainable Podcast上与Robby Russell一起作为嘉宾出现。我们讨论了可维护软件的挑战,包括开发环境、测试套件、代码审查和发布流程。还谈到了数据库维护和优化,以及通过删除无用代码简化系统。我写了一本关于高性能PostgreSQL和Ruby on Rails的书,分享了经验并推广它们的使用。介绍了使用Coverband项目删除未使用的代码。

🔎

延伸解读

可维护性的核心原则

阿特金森将可维护软件定义为“所需努力与影响成正比”。这意味着,如果修改代码、测试、审查和发布的整体流程过于繁琐,即使小改动也需付出巨大努力,那么软件的可维护性就低。开发环境搭建困难、测试套件慢且不可靠、代码审查冗长、发布流程缓慢,都会破坏这种比例关系。这一原则帮助团队识别维护中的瓶颈。

数据库维护的关键指标

文章指出,维护良好的数据库应使用较新的大版本,以获取安全补丁和性能改进;应有充分的数据库级约束来保证数据正确性;未使用的表、索引等对象比例应尽量低,因为它们占用空间、拖慢备份恢复并增加查询延迟。此外,即使使用JSON等无模式数据,也可添加结构和约束。这些特征可作为评估数据库健康度的参考。

Unshipping的实践与收益

Unshipping指战略性地移除不再提供足够价值的功能。阿特金森使用Coverband跟踪代码执行情况,结合APM数据确认未使用的代码,然后安全移除。他们从约10万行代码的核心单体中删除了数千行代码和许多依赖,从而简化了系统,并意外提升了测试套件的速度和可靠性,加快了审查和发布。这表明移除无用代码能带来连锁收益。

❓

Q&A

什么是可维护的软件?

可维护的软件是指所需的努力程度应与影响成正比。也就是说,进行更改(包括编写代码、测试、发布到生产环境)所花费的精力应该与更改带来的影响相匹配。

一个维护良好的数据库有哪些特征?

维护良好的数据库通常具有以下特征:使用较新的主要版本,以获取安全补丁、性能改进和重要功能;有数据库级别的约束来保证数据正确性;未使用的内容(如无用的表、索引、行)比例很低,以减少空间占用、备份恢复时间和查询延迟。

为什么应该移除未使用的代码?

移除未使用的代码可以简化系统,减少代码复杂性和依赖,从而提高软件维护效率。具体好处包括:加快测试套件的速度和可靠性,使代码审查和发布更快速,降低平台成本,并保持努力与影响成正比。

如何使用Coverband来移除未使用的代码?

使用Coverband对代码库进行插桩,跟踪代码行的执行情况并将信息存储到Redis。结合生产系统的数据,可以识别哪些代码被调用、哪些没有被调用。再与APM数据(如Data Dog)交叉验证,确认代码确实未被使用后,就可以安全地移除代码、文档,并通知客户。

为什么作者写了《High Performance PostgreSQL for Rails》这本书?

作者写这本书是因为PostgreSQL和Ruby on Rails是成熟且实用的技术,适合构建Web应用程序。他拥有十多年使用经验,想分享经验并推广这两种技术。同时,他喜欢写作和教学,希望这本书能帮助读者提升工程职业技能,并为自己的职业发展打开新机会。

什么是Unshipping?它如何帮助软件维护?

Unshipping是指战略性地移除系统中不再提供足够价值的功能,以简化维护和聚焦长期目标。它通过减少功能和代码量,使更改更容易;减少传递依赖,简化依赖管理;降低平台成本,从而帮助软件维护。

🏷️

标签

➡️

继续阅读