分享到

引言

数据的存储和组织对于应用程序的成功至关重要。自穿孔卡片和自动演奏钢琴时代以来,存储方法不断演变。关系型数据库将数据存储在一系列由关联组成的中,在过去几十年中一直是绝大多数首选。这些数据库依赖于结构化查询语言 (SQL) 来访问信息并将其结果传达给请求者。

随着应用程序设计的不断发展,新的数据库因其不同的优势而日益普及。在本指南中,我们将介绍一种流行的NoSQL 数据库类型——面向文档的数据库。我们将讨论它们是什么、它们从何而来、文档如何工作、它们的特性以及它们的优缺点。

什么是文档数据库?

文档数据库是 NoSQL 数据库的一种,它以 JSON 和其他数据序列化格式文档的形式存储数据,而不是像 SQL 关系型数据库那样以列和行的形式存储。它们是键值存储 NoSQL 数据库概念的一个子类。文档数据库提供了更好的开发体验,因为它们与现代编程技术非常接近。JSON 易于阅读,并且可以转换为开发人员今天最常使用的语言。

文档数据库与传统关系型数据库提供了截然不同的结构和体验。关系型数据库将数据存储在程序员定义的独立表中,单个对象可能分散在多个表中。这种分离需要连接语句才能从数据库中获取所需的结果。文档模型将对象的所有信息存储在数据库中的一个单一实例中,数据库中的每个对象都可以与下一个对象截然不同。理论上,这种能力根据用例,消除了对对象关系映射 (ORM) 的需求。

文档

如前所述,文档是任何文档数据库的核心。根据文档数据库的不同,文档以 JSON、XML、YAML 或 BSON 等二进制形式封装和编码数据。

文档模型吸引开发人员的一个要素是它与编程语言中的对象相似。使用文档时,其结构或缺乏结构具有一种熟悉感。

文档的基本格式如下

{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

在基本语法的基础上,作者集合中的单个文档可以如下所示

{
"ID": "001",
"Books": { 'Grey Bees', 'Death and the Penguin' },
"Author": "Andrey Kurkov"
}

需要注意的是,在 Books 字段中存储多本书籍是可能的。在关系型数据库中,这是不可能的。需要一个 Author 表和一个 Book 表,通过一个进行连接。这个 Book 表中的外键很可能是类似 author.id 的东西,其中每条记录都分配给一个作者。我们可以在下表中直观地看到差异

作者 ID姓名
001Andrey Kurkov
书名作者 ID
灰色蜜蜂001
死亡与企鹅001

有了对文档结构和能力的理解,我们可以更进一步,探讨文档模型所带来的优点和缺点。

文档模型的优势

文档数据库有明显的优点和缺点,文档模型是否合适取决于具体的应用程序。文档模型的灵活性、易于扩展和快速启动的敏捷性是其优势,但同时也伴随着相当大的权衡。

灵活性

文档数据库提供关系型数据库无法比拟的灵活性。文档数据库单独定义每个文档的结构。这种形式是文档本身定义的特性,而不是记录必须符合的外部结构。这与关系型数据库的严格性相反。

文档模型不会让结构更改像关系型数据库那样昂贵。更改不需要修改所有现有记录以匹配新结构。您可以即时更改单个记录要记录的数据,延迟或跳过没有相同结构的其他文档,没有任何要求。

您的数据库结构可以随着您的应用程序逻辑在开发过程中快速演变。这使得更改的负担更小,因为每次结构更改所需的同步和迁移过程减少。数据库系统将允许您应用的任何新文档结构与所有以前的结构并存。

文档模型提供的灵活性鼓励了存储逻辑的迭代和演进。但是,重要的是要记住,软件本身不太可能像您进行更改那样能为您提供关于数据的那么多保证。如果数据集合的形状没有达成一致的标准,那么作为开发人员,您有责任强制执行一致性并酌情修改文档,以使您的数据保持在易于理解的状态。

可扩展性

文档模型通常允许您避免垂直扩展,并在应用程序增长时采用更具成本效益的水平扩展方法。尽管该领域有所增长,但关系型模型在可扩展性方面存在固有的困难。

文档数据库可以避免关系型数据库所经历的许多这些缺点,这归因于它们的系统如何构造数据。通过将相关数据共置在一个文档中,可以最大限度地减少不同主机之间的协调。分片数据集是文档数据库中更常见的策略。这是因为基于文档的操作通常不需要太多协调,因为许多操作都针对单个记录。

由于文档数据库中单个文档和集合之间的约束和链接较少,因此协调通常更容易,操作也趋向于更自包含。这使得文档数据库提供商能够优先考虑性能和可用性,而关系型数据库则为了一致性而被迫做出让步。

这导致了权衡,影响到数据的安全性以及系统处理中断和网络分区的情况。主要的区别在于,文档数据库在调整一致性、性能和可用性水平方面往往具有更大的灵活性。相比之下,关系型数据库通常要求一致性始终是优先事项。

敏捷性

文档模型的无模式能力可以使数据库非常快速地启动并运行。一旦创建了文档,所需维护最少,您可以立即插入对象作为文档。

文档数据库提供的敏捷性意味着您在实施时无需了解数据的精确结构。数据模型可能会发生变化,在开发开始时制定清晰的计划可能具有挑战性。敏捷性和灵活性的结合允许开发人员立即启动数据库实例并填充文档集合,并随着应用程序的演进而发展模型。

然而,这种缺乏模式也带来了权衡。数据的一致性需要持续管理,而不是依赖于预定义模式的计划。事先对数据的外观和访问模式有一个很好的了解是有优势的。关系型数据库强制要求这种考虑。

结论

本文介绍了文档数据库及其为何成为最受欢迎的 NoSQL 产品之一。我们探讨了文档的结构和功能,以及文档模型的优点和相关的权衡。

文档数据库提供了与关系型数据库不同的数据组织和访问方法。这种从传统模型中演变出来的选择对开发人员来说令人兴奋。根据您的应用程序,您可以决定哪些特性和优势最符合您的理念和目标。

关于作者
Alex Emerich

Alex Emerich

Alex 是典型的观鸟爱好者、嘻哈音乐迷、书虫,也喜欢撰写关于数据库的文章。他目前居住在柏林,在那里你可以看到他像利奥波德·布鲁姆一样漫无目的地在城市中行走。
© . All rights reserved.