The Kollected Kode Vicious

Kode Vicious - @kode_vicious

  下载本文的PDF版本 PDF

存储困境

谨防以二进制格式存储数据


尊敬的 KV:

在我的公司,我们非常重视存储所有数据,不仅仅是源代码,都放在我们的源代码控制系统中。公司成立之初,我们就决定尽可能将所有内容都放在一个地方。问题是随着时间的推移,我们已经从纯粹的编程环境转变为有其他人员的环境——这些人使用 Outlook 发送电子邮件,并将他们的数据以二进制和专有格式保存。

起初,我们中的一些人通过让邮件服务器将所有电子邮件转换为纯文本,然后再转发来处理那些令人 ужасающими 彩色的电子邮件,但这对于那些告诉你他们绝对必须使用 Excel,然后将他们所有的数据都存储在 Excel 中的人来说,并没有什么帮助。最大的问题是这些文件在我们的源代码控制系统中占用了大量的空间,但我们仍然不想将重要信息存储在系统之外。我们中的许多人几乎准备放弃,不再担心这些类型的文件,并允许公司的数据被巴尔干化,但这对我来说似乎不是正确的答案。

二进制文件的处理


尊敬的 Binning:

虽然规模大小的论点曾经是一个令人信服的理由——甚至在五年前也是如此——但我们都知道现在 TB 硬盘很便宜,如果您告诉我您的公司没有为您的源代码控制系统配备相当大的集中式文件存储,我会感到非常惊讶。我认为反对以专有或二进制格式(是的,也有开放的二进制格式)存储重要的公司数据的最佳论点是关于控制和版本控制。

版本控制的论点大致如下。例如,假设控制您数据中心的人员将其机架图(显示所有服务器和网络设备的放置位置,以及这些设备之间的所有连接)以二进制格式存储。即使他们用来设置文件的程序具有某种“追踪更改”功能,您也无法比较机架布局的两个版本。任何维护数据中心的公司都在更改机架布局,无论是添加或移动设备,还是更改或添加网络连接。如果在更改发生几天或几周后出现问题,您将如何将当前版本的布局与几天或几周前的版本进行比较,而后者可能已经是几个版本之前的版本?答案通常是,您无法做到。当然,这种情况永远不会发生,对吧?对。

第二个也是我认为更有力的论点与您对数据的控制有关。如果一条数据对于您业务的运行至关重要,您真的希望以某种方式存储它,以至于其他公司可以通过升级或错误来阻止您使用该数据吗?在这一点上,如果您足够信任,您可以将大部分数据存储在云端,例如 Google Apps 之类的服务中。KV 永远不会这样做,因为 KV 有严重的信任问题。我实际上认为更多的人应该清楚地思考他们的数据存储在哪里,以及与其数据相关的最坏情况是什么。我并没有偏执到不以二进制或专有格式存储任何东西,我也不是像某些开源狂热者那样疯狂地宗教化,坚持所有数据格式都必须是免费的,但我确实会在将我的数据放在某个地方之前进行思考。需要提出的问题是

• 如果五分钟、五小时或五天无法获取此数据,会造成什么影响?

• 如果此数据被盗或被公司外部人员查看,风险是什么?

• 如果制造此产品的公司倒闭了,那么其他人制造可以读取此数据的产品的可能性有多大?

计算机的历史上充斥着不得不向已倒闭的公司支付巨额资金以继续维护系统,从而不会失去对其数据访问权限的公司。您不希望成为这些受害者之一。

KV


尊敬的 KV:

我在公司工作时最早聘用的员工之一似乎从他的个人目录中运行我们许多更重要的程序。这些脚本用于监控我们系统的健康状况,但没有签入我们的源代码控制系统。它们之所以还算安全,唯一的原因是我们的所有个人目录都每晚备份。他的个人目录习惯让我非常恼火,我确信如果您在这里工作也会让您恼火,但我不能真的对 6 号员工大喊大叫,让他清理他个人目录中的所有重要程序。

1066 号员工


尊敬的员工:

我同意,只有当您是 2 号员工时,您才可以对 6 号员工大喊大叫。当然,这很少阻止我对别人大喊大叫,但无论如何我对每个人都大喊大叫,所以我周围的人已经习惯了。真的没有任何理由允许任何人,包括高级工程师,从个人目录运行代码。个人目录用于个人的个人文件、从源代码控制中检出的文件、临时文件、个人不需要共享的生成数据,当然还有盗版音乐和视频。好吧,也许最后一个不应该在那里,但它总比放在中央文件服务器上好!

人们从他们的个人目录中运行程序有两个问题。第一个问题是当他们辞职或被解雇时会发生什么。那时您必须将他们锁定在帐户之外,但该帐户必须保持活动状态才能运行这些程序来维护您的系统。现在您遇到了紧急情况,因为您必须立即转换所有这些程序——在没有作者帮助的情况下——使其足够通用,以便在您的系统中运行。此类程序通常依赖于作者环境中累积的位,包括支持脚本、库和仅在原始作者登录帐户时设置的环境变量。

第二个问题是,运行这些程序的用户通常必须具有很高的权限才能运行它们。即使这个人并非主动作恶,如果这个人以自己的身份登录时犯了错误,那么如果这个人拥有很高的权限,后果也会更加严重。在这种最坏的情况下,我见过有些人的帐户虽然不叫 root,但在他们登录时却拥有 root 权限,这意味着任何错误,例如误输rm *在错误的目录中,都将是灾难性的。“他们为什么以 root 身份运行?”我听到您在喊。原因与每个人都以 root 身份运行的原因相同,因为您以 root 身份所做的任何事情总是会成功,无论它是否是正确的事情。

我知道这与我的性格不符,但如果您不是那种会大喊大叫的人,我建议您唠叨、劝诱,甚至主动提出自己转换代码,以便将其从这个人的个人目录中移出。

KV


喜欢它,讨厌它?请告诉我们

[email protected]

KODE VICIOUS,凡人称之为 George V. Neville-Neil,以从事网络和操作系统代码为乐和盈利。他还教授各种与编程相关的课程。他感兴趣的领域是代码探险、操作系统和重写您的糟糕代码(好吧,也许不是最后一个)。他获得了马萨诸塞州波士顿东北大学计算机科学学士学位,并且是 、Usenix 协会和 IEEE 的成员。他是一位狂热的自行车爱好者和旅行家,目前居住在纽约市。

© 2011 1542-7730/11/0400 $10.00

acmqueue

最初发表于 Queue 第 9 卷,第 5 期
数字图书馆 中评论本文





更多相关文章

Ethan Miller, Achilles Benetopoulos, George Neville-Neil, Pankaj Mehra, Daniel Bittman - 远内存中的指针
为了有效利用新兴的远内存技术,需要考虑在父进程上下文之外操作富连接数据。正在开发中的操作系统技术通过公开诸如内存对象和全局不变指针之类的抽象概念来提供帮助,这些抽象概念可以被设备和新实例化的计算遍历。这些想法将使运行在具有分离内存节点的未来异构分布式系统上的应用程序能够利用近内存处理来获得更高的性能,并独立扩展其内存和计算资源以降低成本。


Simson Garfinkel, Jon Stewart - 磨砺你的工具
本文介绍了我们在最初发布十年后更新高性能数字取证工具 BE (bulk_extractor) 的经验。在 2018 年至 2022 年期间,我们将程序从 C++98 更新到 C++17。我们还进行了完整的代码重构并采用了单元测试框架。DF 工具必须经常更新,以跟上其使用方式的变化。对 bulk_extractor 工具的更新描述可以作为可以而且应该做什么的示例。


Pat Helland - 自主计算
自主计算是一种业务工作模式,它使用协作来连接领地及其使者。这种基于纸质表格的模式已经使用了几个世纪。在这里,我们解释了领地、协作和使者。我们研究了使者如何在自主边界之外工作,并且在保持局外人身份的同时很方便。我们还研究了如何在不同的领地之间启动、长时间运行并最终完成工作。


Archie L. Cobbs - 持久性编程
几年前,我的团队正在为一个增强型 911 (E911) 紧急呼叫中心的商业 Java 开发项目工作。我们试图使用传统的 Java over SQL 数据库模型来满足该项目的数据存储需求,这让我们感到沮丧。在对项目的特定需求(和非需求)进行一些反思之后,我们深吸一口气,决定从头开始创建我们自己的自定义持久层。





© 保留所有权利。

© . All rights reserved.