DevOps 简史:从数据库到无限未来(二)

DevOps 简史:从数据库到无限未来(二)

追求可以在水平方向上无限扩展的大规模分布式数据库,已经导致了专业数据库的爆炸式增长,实际上发布了数十种不同的数据模型和针对超特定用例的整个产品。

翻译自 A Brief DevOps History: Databases to Infinity and Beyond, Part 2

这是一个两部分系列的第二部分。阅读第一部分

我们在 1979 年结束了,那时发布了 INGRES 和 Oracle v2 。在那个历史时期,数据库几乎完全是为企业构建并使用的工具,根据它们的需求开发。但随后进入了 1980 年代(在我们看来,是最时尚的十年),随之而来的是台式计算机时代,还有一些在历史上具有重要意义的黑客电影。

计算机不再是占据整个房间并需要专门的技能来操作的东西;它们放在您的桌子上,价格合理,与计算机互动的许多困难都已经被抽象化了。

最初,在台式机市场上,有少数几种不同的轻量级数据库争夺主导地位。当 IBM 开发基于 DOS 的个人电脑时,它委托开发了一个基于 DOS 的 dBase 版本。IBM PC 于 1981 年发布,其中 dBase 是最早可用的软件之一,它迅速走红。

有趣的是,没有 dBase I - 它最初是作为 Vulcan 发布的,后来重新发布时改名了。之所以选择了 “dBase II” 这个名称,仅是因为“二”意味着第二个版本,因此会更少有错误,更稳定。这个营销策略奏效了,dBase II 注定要占据主导地位。

dBase标志 dBase logo

dBase 在与数据库交互时抽象了许多必需但令人厌烦且技术复杂的方面,比如打开和关闭文件以及管理存储空间的分配。与它的前身相比,这种易用性确保了它在历史上的地位。围绕它兴起了整个业务,有多个数据库构建在它之上,使用相关的编程语言,但最初没有一个能够取代它。

在整个 80 年代和 90 年代的大部分时间里,dBase 仍然是最畅销的软件之一,直到一个糟糕的版本几乎使它走向了毁灭。

在 20 世纪 90 年代,对软件开发方式的变化使数据库稍微朝着不同的方向发展。面向对象编程成为主导设计范式,这就需要数据库处理数据的方式发生变化。

由于我们开始将代码和数据都视为可重复使用的带有关联属性的对象,我们需要以与当时许多数据库默认不允许的稍微不同的方式与数据进行交互。额外的抽象层变得必要,以便我们能够思考我们正在做什么,而不是特定的实现细节。这就是我们得到面向对象关系映射工具(ORMs)的方式。

Visual FoxPro logo

为了满足面向对象编程的需求,Microsoft 收购了 FoxPro,随后基于它构建了支持一些面向对象设计特性的 Visual FoxPro。然而,这次收购给了他们更重要的东西 - FoxPro 的查询优化例程被嵌入到 Microsoft Access 中,几乎立即使其成为 Windows 环境中最广泛使用的数据库。

1995 年,Access 开始作为标准的 Microsoft Office 套件的一部分发货,而不再是独立的产品,进一步扩大了其影响力,并巩固了其在 Windows 市场中的主导地位。

在 21 世纪初,互联网的普及和比以往任何时候都更广泛地进行扩展的不断需要,迫使数据库领域发生了另一次创新,NoSQL(非关系型数据库)进入了竞争,但让我们首先了解这个名字。

Carlo Strozzi 最初在 1998 年使用了 “NoSQL” 这个名字来指代他正在开发的一个轻量级数据库,但它与今天的 NoSQL 没有任何相似之处。Strozzi 当时仍在构建一个关系型数据库;它只是没有使用 SQL,而是使用了 shell 脚本。根据 Strozzi 的说法,今天的 NoSQL 更准确地应该被称为 NoRel。

这个术语在 2009 年因 Johan Oskarsson 而再次流行,他在一个活动中使用了这个术语,以回应数据库领域一些新技术的出现和增长,包括 Google 的 BigTable 和 Amazon 的 DynamoDB,以及它们的开源克隆。

“开源分布式非关系型数据库” 这个说法有点太啰嗦,不够简洁,无法作为 Twitter 的标签,因此 Rackspace 的 Eric Evans 提出了一个替代方案:NoSQL。它取得了成功,其余的就是历史。

回到技术本身:而关系型数据库关注 ACID(原子性、一致性、隔离性、持久性),非关系型数据库关注 CAP(一致性、可用性、分区容忍性)定理。这个思想是,没有一个分布式系统本质上可以免受网络故障的影响,因此你可能只能同时拥有三者中的两个。当发生故障时,必须做出选择,以确保通过取消操作来实现一致性,但这会牺牲可用性;或者通过继续操作来确保可用性,但这会牺牲一致性。

大多数分布式数据库通过提供 “最终一致性” 来解决这个问题,即更改不一定会同时传播到所有节点,但在几毫秒内会完成传播。

通常,当人们考虑 NoSQL 数据库时,他们会想到类似于 MongoDB 的使用文档模型的内容。然而,实际上可选择的领域远远不止于此 - 我们还有多种不同类型的键值数据库,如 Redis;宽列存储,如 DynamoDB;图数据库,如 Neo4j;以及实现了所有这些模型的混合数据库,如 CosmosDB 等。这些数据库都有不同的优势、劣势和使用情况,但它们都存储非规范化数据,通常不支持联合操作。

追求可以在水平方向上无限扩展的大规模分布式数据库,已经导致了专业数据库的爆炸式增长,实际上发布了数十种不同的数据模型和整个产品,以满足超特定的使用情况。从技术上讲,万维网本身就是一个大型分布式超文本数据库。

在今天可用的各种关系型和非关系型数据库之间,现代时代就是数据库时代。几乎我们今天与世界互动的每一个动作都是数据库动作,在很大程度上是由在大多数正在构建未来工具的人甚至出生之前就已经产生的技术支持下实现的,在之间经历了几十年的迭代增长,而且我们的速度比以往任何时候都要快。再过 60 年,速度和规模对我们意味着什么?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注