专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
51好读  ›  专栏  ›  数据分析与开发

“列数已达上限”:史上最烂代码库的“绝命”一击

数据分析与开发  · 公众号  · 数据库  · 2024-08-07 11:50

主要观点总结

本文讲述了Jimmy Miller所经历的一个混乱且充满挑战的代码库。这个代码库存在许多问题,如SQL Server设计缺陷、缺乏版本管理、混乱的数据库设计等。他的经历引发了开发者们的热烈讨论,一天之内评论区就汇集了500多条留言。文章涵盖了数据库问题、代码库问题以及软件开发的挑战。

关键观点总结

关键观点1: 文章描述了一个混乱的代码库及其带来的各种问题

文章介绍了作者在一个软件开发项目中遇到的糟糕的代码库,包括数据库设计问题、代码重复、缺乏版本控制等。

关键观点2: 代码库的问题引发了开发者们的热烈讨论

文章在Hacker News上激起了非常多的讨论,一天之内就超过了500条留言,很多开发者分享了自己经历过的糟糕代码库。

关键观点3: 文章涵盖的方面包括数据库、代码库和软件开发行业的挑战

文章不仅讨论了代码库的问题,还涉及数据库设计和软件开发的挑战,包括公司不愿意采用最佳实践或新的软件文化的问题。


正文

请到「今天看啥」查看全文


SequenceKey 就像是粘合剂,在每一个创建新实体的存储过程当中,我们首先得从 SequenceKey 中获取一个键,然后递增它,再将其作为 N 个不同表的 ID 进行插入。也就是说,所有实体表之间都存在一条隐式连接。如果大家在系统中看到某个 ID,那么各相关表中很可能会存在一个拥有相同 ID 的行。说实话,这设计挺绝的。

数据库可以永远存在,但我们的登录系统却要受到日历的限制。当然,我指的不是用来代表真实日期的日历,而是名叫“日历”的数据库表。其中有哪些内容?就是手动填写的日历。在问及公司老技术 Munch 时,他告诉我日历用尽后我们就没法登录系统了。几年之前发生过这种情况,所以他们让一名实习生把日期又续了五年,以确保这种情况短时间内不会再次出现。那到底是哪些系统在使用日历?天知道……

每天早上 7:15,员工表都会被删除一次,所有对应数据也将完全消失。之后来自 adp 的一个 csv 文件会被上传到表中。在此期间,我们无法登录系统。有时候这个过程会失败,但这还没完。相应数据需要被复制给总部。所以有人会向某位管理员发送一封电子邮件,而他每天都会按下按钮来手动复制数据。

说到这里,很多朋友可能地想:难道就没人出手清理一下这套数据库吗?至少让它更易用一点?嗨嗨,我们公司当然早就想到了,所以保留了一套数据库副本。这套副本中的数据大概比实际应用的版本旧了 10 分钟,而且同步只会单向进行。但好消息是这套数据库是有标准化操作流程的,“仅”需 7 次连接就能完成从商家到相应电话号码的匹配。

每位销售人员每个月都有一项必须达成的配额,名叫“胜利”。保存这些数据的表格(请注意,不是财务记录,而是特定的销售核算方式)非常复杂。每一天,都会有专人识别出哪些行经过了添加和更新,并将新内容与总部那边的某套系统进行同步。这倒不是什么大问题,可后来有销售人员发现他们可以要求手动更改这些记录。

当时这名销售人员已经完成了绩效目标,之后又在当月签下另外一笔大单。那人家当然希望能把这笔单子推迟到下个月,减轻一下后续的绩效压力。一名实习生负责处理这件事。消息传出之后,接下来的三年间请求数量开始呈现指数级增长。有段时间,我们有 3 名实习生全职负责编写这类 SQL 语句。之所以没有专门开发应用程序处理这项工作,是因为公司觉得难度太大。不过在我离职之后,我已经帮助这些实习生开发了相应的应用程序,只是不确定能不能如期生效。

代码库: 部分代码得看硬盘!

说起数据库,就不得不提相应的代码库。当时那套代码库可太夸张了。我入职的时候,所有代码都保存在 Team Foundation Server 当中。很多朋友可能不太熟悉,这是一套微软开发的集中式源代码控制系统。我上手的主代码库一半是 VB,一半是 C#。它运行在 IIS 之上,而且使用会话状态来处理各项事务。这在实践层面意味着什么?就是说如果分别通过路径 A 和路径 B 导航到页面,那页面上显示的内容将会完全不同。

但我们也不能简单说这套代码库就是一半 VB、一半 C#,因为仓库中都签入了当时业已存在的每一种 JavaScript 框架,此外还涉及每位开发者自认为需要保留的自定义更改。更值得注意的还有 knockout、backbone 和 marionette,当然还有少量的 jquery 和 jquery 插件。

而且这套代码库还不是孤立的,在它身旁还有十几项 soap 服务和一些原生 Windows 应用程序。另外值得注意的是发货管理器——据说整个应用程序是由某位开发人员在一个周末之内独力完成的。我们叫他 Gilfoyle,据说这是位开发效率极高的程序员。我从没跟他当面交流过,但又总觉得似乎跟他神交已久,因为我一方面看过他存进仓库的代码、另外也看过他硬盘上的开发成果。

大家还记得 Munch 吗,他在 Gilfoyle 离开公司多年之后,仍然把这位老前辈的硬盘以 RAID 的形式保留在自己的办公桌上。为什么?因为 Gilfoyle 老兄最臭名昭著的习惯,就是不爱签入代码。不仅如此,他还为某位个别用户构建了随机的一次性 Windows 应用程序。于是乎,总会有用户带着只存在于 Gilfoyle 硬盘上的应用程序 bug 报告来找我们,而唯一的解决办法就是翻找这位老兄的技术“遗产”。

解决各种 bug







请到「今天看啥」查看全文