如何维护 NoSQL 数据库中数据之间的关系
已发表: 2022-11-23随着生成的数据量继续以指数级速度增长, NoSQL 数据库越来越受欢迎。 然而,对于这些数据库如何工作以及如何在 NoSQL 环境中维护数据之间的关系,仍然存在很多困惑。 在传统的 SQL 数据库中,数据存储在表中,并通过外键维护关系。 在 NoSQL 数据库中,数据通常存储在文档中,类似于面向对象编程语言中的对象。 文档可以嵌套,这意味着可以在不需要外键的情况下维护关系。 有几种不同的方法可以维护 NoSQL 数据库中数据之间的关系。 最常见的方法是使用参考文档。 参考文档是包含对另一文档的引用的文档。 例如,如果您有一系列博客文章,则每篇文章都可以引用作者文档。 在 NoSQL 数据库中维护数据之间关系的另一种方法是使用嵌入式文档。 嵌入式文档是存储在另一个文档内部的文档。 例如,如果您有一组博客文章,则每篇文章都可以有一个包含作者信息的嵌入文档。 使用参考文档或嵌入文档的好处是将来更新数据更容易。 例如,如果你想改变一篇博文的作者,你只需要更新作者文档。 您无需更新每篇博文。 使用参考文档或嵌入文档的缺点是它会使数据更难查询。 例如,如果您想要查找特定作者撰写的所有博客文章,则需要查询每篇文章的作者文档。 如果您有大量文档,这可能会很低效。 如果您使用的是 NoSQL 数据库,了解如何维护数据之间的关系很重要。 参考文档和嵌入文档是执行此操作的两种最常见方法。
NoSQL 在面向文档的数据库中的实现不足以或根本不存在对象之间关系的开发。 在这篇博文中,我们将向您展示如何将对象/关系管理委托给数据库。 对象关系是使用 REST API 调用创建的。 在此示例中,我们将使用 PUT 动词将客户与问题联系起来。 当以这种方式表示关系时,总是存在一个对象数组。 在每次引用对象(即关系)后,您将能够看到原始文档的更改。 因为数据库记录了每个关系的使用情况,我们还可以看到某个特定文档在关系中的使用位置。 使用下面显示的示例查询,您可以通过使用特殊查询找到对文档的隐式引用的存在:referencedby=true。
MongoDB 中各个文档之间存在关系,表示它们之间的逻辑关系。 使用引用和嵌入式方法,可以对关系进行建模。 让我们看一下在下面的示例中为具有 N:N 关系的用户存储地址的情况。
多对多 (N:M) 关系比一对多关系更难实现,因为在关系数据库中没有单一命令可以实现。 当它们在 MongoDB 中实现时,它们是相同的方式。 默认情况下,MongoDB 不允许您创建任何类型的关系。
非关系数据库,也称为“NoSQL”,通常是纯 SQL 数据库。 他们保留信息的能力差异很大。 非关系数据库通常以非表格格式存储数据,使其更能适应 SQL 和 NoSQL 数据库等现代数据结构的需求。
Nosql 数据库可以是关系型的吗?

NoSQL 数据库不是关系数据库,这意味着它们可以具有与 SQL 数据库不同的结构(例如行和列),并且可以更轻松地适应用户的需求。
关系型和 NoSQL 等数据库系统通常在云原生应用程序中实现。 他们的架构和数据存储实践不同,他们对信息和数据的访问也不同。 非 SQL 数据库成对存储非结构化或半结构化数据或没有格式的文档。 当大容量服务需要亚秒级响应时间时,首选 NoSQL 数据存储。 如果您正在为当前正在更新的项目寻找一致的系统,请等待该响应,直到所有副本都成功更新。 即使响应不是最新的,每个节点都会返回即时响应。 如果复制的数据节点发生故障,分区容错性可确保系统继续运行。
对于云原生应用程序,数据库即服务 (DBaaS) 优于其他类型的数据服务。 这些服务可用于提供安全性、可扩展性和监控。 您可以配置 Azure 虚拟机并在其上为每项服务安装您选择的数据库。 云原生微服务可以根据用户的要求利用关系数据库或 NoSQL 数据库。 Azure 数据库即服务 (DBaaS) 平台包括四个托管关系数据库。 当谈到准时制和现收现付模式时,没有必要退缩。 Microsoft 的旗舰数据库 SQL Server 以及许多开源替代品都可用。
通过选择所需的处理核心、内存和存储量,您可以在不到一分钟的时间内配置 Azure 数据库。 微软致力于让 Azure 成为一个开放平台,因此该公司提供流行开源数据库的托管版本。 无服务器计算层在非活动期间自动暂停数据库,只允许扣除存储费用。 Oracle 收购了 Sun Microsystems,MariaDB 的托管版本创建为 MySQL 的一个分支。 MariaDB 的 Azure 数据库是一种完全托管的数据库服务,作为 Azure 云的一部分提供。 该服务建立在 MariaDB 社区版服务器引擎之上。 它可以通过提供可预测的性能和动态扩展来处理任务关键型工作负载。
命令行界面工具或 Azure 数据迁移服务都是将 Postgres 数据库迁移到其中的绝佳方式。 除了在全局级别支持主动/主动集群之外,CosmosDB 还支持写入和读取,允许您配置任何数据库区域来执行此操作。 CosmosDB 数据库系统可用于以最少的代码或数据更改迁移现有的 Mongo、Gremlin 或 Cassandra 数据库。 Azure 表存储可以轻松传输到 CosmosDB 表 API,供使用它的服务使用。 图 5-13 包含 Azure Cosmos DB 的五个定义明确的一致性模型。 这些选项使管理一致性、可用性和性能之间的权衡变得简单。 下表描述了每个一致性级别。
Microsoft 项目经理 Jeremy Likness 对这五个模型进行了出色的解释。 一种称为 NewSQL 的新数据库技术将分布式可伸缩性与 ACID 保证相结合,以创建面向对象的数据库。 当云环境是短暂的时,newSQL 数据库由于存在可以随时重新启动或重新安排的底层虚拟机而蓬勃发展是有道理的。 上图包括由 Cloud Native Computing Foundation 创建的开源项目。 与使用服务构造的其他工作负载相比,客户端可以将单个 DNS 请求发送到一组相同的 NewSQL 数据库进程。 如果我们将数据库实例与与其关联的服务地址分离,我们就可以在不影响现有应用程序实例可用性的情况下进行扩展。 无论同时发送多少请求,对服务的特定请求将始终产生相同的结果。
由于其众多优势,NoSQL 数据库正迅速变得越来越流行。 能够横向扩展、处理更多数据、更灵活地存储数据以及与其他系统集成,这些都是云计算的优势。 与传统关系数据库相比,NoSQL 数据库有许多优势。
Mongodb 可以是关系型的吗?
MongoDB 除了是一个完善的非关系数据库系统,具有更高的灵活性和水平可扩展性之外,还具有一些优于关系数据库的优势,例如参照完整性和并发性。
Snowflake 是关系数据库吗?
Snowflake 是一个强大的关系数据库,这并不奇怪。 您可以将它与所有主要的关系数据模型一起使用,包括标准的三个模型(表、关系和连接)和更不寻常的雪花模型。 该数据库还支持实时流、对象索引和查询加速,以及现代数据库中的所有现代关系数据库功能。 有没有关系? 这个数据库是一个关系数据库。
哪个 Nosql 数据库不支持关系或连接?

有一些 nosql 数据库不支持关系或连接,包括 MongoDB、Cassandra 和 Hbase。 虽然这些数据库不像其他一些数据库那么受欢迎,但它们仍然被许多组织使用。
Oracle NoSQL 数据库不支持传统关系数据库中使用的通用连接运算符。 但是,它确实为具有相同层次结构的表提供了一种特殊类型的连接。 因此,连接的执行非常简单,因为只有位于同一位置的行才能匹配。
Nosql中的实体关系
nosql 中的实体关系是 nosql 数据库中两个或多个实体之间的关系。 这种关系可以是一对一、一对多或多对多。
文档数据库的 Er 图
但是,您可以使用 ER 建模原则以类似的方式为面向文档的数据库构建 ER 图。 创建可用于存储文档的数据模型。 您打算存储的文档类型、每个文档的字段和属性以及整个模型都应该包含在此数据模型中。 创建数据模型需要实体图。 下图将演示文档存储中的数据结构。 然后,使用关系图创建数据模型。 下图描述了数据模型中实体之间的关系。
Nosql中的多对多关系
多对多关系是指两个实体可以通过同一实体的多个实例链接起来的关系。 有一些现实生活中的例子:医生可以治疗很多病人,同时也有很多医生。
我想使用 NoSQL 数据库为我的 node.js 应用程序实现分类结构(地理术语)。 地理标签背后的想法是用这些术语识别出生在某些城市或城镇的人,然后过滤掉他们,然后给他们贴上标签。 John Doe 于 1957 年出生于布莱克本(兰开夏郡),Paul Brown 于 1960 年出生于利物浦,Georgia Doe 于 1982 年出生于威勒尔。如果这个国家只有少数结构元素遵循现代元素,那么它们将以如下方式过滤不可能。 我是NoSQL 世界的新手(我没有设计过任何 NoSQL 数据库,所以我面临着严峻的设计挑战)。 我相信有几种选择可以解决它。

鱼尾纹表示法:多对多关系
当以图形方式表示多对多关系时,您通常会在数据库中看到鱼尾纹符号。 根据这种表示法,表之间的关系由一系列线条表示。 图表的原点(左上角)通常以一条线开始,向下延伸到称为“外部”的表格(因为那是原点所在的位置)。 之后,行将转到相关表,然后是子表。
Nosql 文档
Nosql 文档是用于编写nosql 代码的一个过程或一组规则。 它是一种编码风格,旨在使 nosql 代码更具可读性和更易于理解。
NoSQL 数据库与传统的关系数据库不同,它不以固定格式存储数据。 最常见的类型是文档、键值、宽列和图形。 在 2000 年代后期,存储成本的显着下降导致了 NoSQL 数据库的发展。 开发人员可以使用这些工具来存储大量非结构化数据,从而使他们能够处理范围广泛的项目。 文档数据库、键值数据库、宽列存储和图形数据库是一些最常见的 NoSQL 数据库。 因为不需要连接,所以查询速度更快。 最常见的用例包括关键(例如,财务数据)和更有趣(例如,存储来自智能猫砂盆的 IoT 读数)应用程序。
在本教程中,我们将了解 NoSQL 数据库的工作原理以及它对各种应用程序有益的原因。 此外,我们还将了解有关 NoSQL 数据库及其应用程序的一些常见误解。 根据 DB-Engines 的说法,MongoDB 是世界上使用最广泛的非关系数据库。 在本教程中,您不需要在计算机上安装任何软件来查询 MongoDB 数据库。 集群是存储MongoDB 数据库的数据库集合。 当您拥有集群时,可以访问 Atlas 数据存储。 您可以创建三种类型的数据库:在 Atlas Data Explorer 中手动创建、在 MongoDB Shell 中或在 MongoDB Compass 中创建,具体取决于您的首选编程语言。
这个例子将展示如何导入 Atlas 的示例数据集。 NoSQL 数据库可以为开发人员提供许多优势,例如灵活的数据模型、水平缩放、闪电般的快速查询和易用性。 您可以在 Data Explorer 中插入新文档、编辑现有文档以及删除文档。 使用聚合框架,您可以以非常强大的方式分析数据。 您可以在图表上轻松查看 Atlas 和 Atlas Data Lake 数据。
查询
当可伸缩性比数据一致性更重要时,通常会使用 NoSQL 数据库。 NoSQL 数据库有时也被称为“not only SQL”,以强调它们可能支持类似 SQL 的查询语言。
以前,数据模型和查询系统是紧密集成的。 我们现在可以创建优先考虑开发人员生产力的数据库系统,并开始从数据模型中抽象查询方法,以便优先考虑开发人员生产力。 SABRE 是世界上第一个商业数据库,由 IBM 和美国航空公司于 1994 年创建,旨在提高机票效率。 NoSQL 数据库在过去几年中针对可扩展性、正常运行时间、冗余、灵活性和灵活性进行了优化。 除了在 Riak 和 MongoDB 中添加 map-reduce 作为选项外,他们还将其添加到 CouchDB 和 Riak 中。 我们期待来自 SQL 的简单的即席声明查询,但事实证明它更像是一个脚本技巧。 如果您正在构建一个易于扩展的数据库系统,那么查询不是您的主要关注点。
XQuery 和 Jsoniq 试图创建一种标准查询语言,可用于在文档数据库中检索分层文档。 MarkLogic 是一个 XML 文档数据库,除了 XQuery 之外还使用 XQuery,而 ArrangoDB 使用自己的超集来调整数据建模。 这两种语言都与磁盘上存储的数据格式有着密切的联系,并且都已在商业上使用。 文档数据库中使用的一种或两种查询语言与数据库中使用的查询语言相关。 与 SQL 相反,N1QL(或非第一形式查询语言)本质上非常类似于 SQL。 尽管没有强制执行关系,但我们在文档上进行协作,无论它们是正式的还是非正式的。 Couchbase 和 Cassandra 都在他们的索引和查询解析上投入了大量时间和精力,以便他们可以以这种方式查询数据而不需要关系搜索。
你可以在 Nosql 中查询吗?
NoSQL 这个名称并不是指 SQL。 SQL 不是在 No SQL 中编写查询的首选方法。 该软件不以关系格式存储数据,而是以有组织的方式存储数据。
什么是 Nosql 示例?
基于列的 NoSQL 数据库很常见,例如 Cassandra、HBase 和 Hypertable。
Nosql 比 Sql 更容易吗?
SQL 数据库具有跨表处理查询和连接数据的优势,允许对结构化数据进行更复杂的查询,例如临时请求。 NoSQL 数据库跨产品的一致性,尤其是在处理大量数据时,是此类数据库的一个共同特征。
Nosql 数据模型
什么是 NoSQL 数据模型? 优缺点都有什么? 没有关系数据库管理系统(RDBMS) 这样的东西,这是一个无法复制的模型。 因此,模型没有明确的方式来理解数据之间的关系——它们是如何组合在一起的。
Redis 中的 8 种数据建模模式涵盖了 NoSQL 中数据建模的基础知识,以及入门的最佳实践。 本书研究了八种数据模型,开发人员可以使用这些模型来创建现代应用程序,而不会遇到传统数据库可能带来的困难。 使用 NoSQL,您可以组合两个单独的表或集合来创建单个表或集合。 因此,更容易找到所有相关数据并理解它们之间的关系。 NoSQL 中的每个表都可以单独查看。 当您想要对一对多关系建模时,您可以分别嵌入有界列表(例如已知大小的列表)和无界列表。 本例中的产品是一个,许多评论、作者姓名、发布日期、评级和评论是“许多”变量。
第一种模式是具有无限边的多对多关系。 关系数据库的目标是将产品存储在单独的表中。 由于模式非常灵活,允许您根据集合类型分隔类型字段,因此所有 Redis Stack 模式都可以使用此功能进行设置。 当您积累和聚合时间序列数据时,桶模式会减少开销。 修订模式可用于需要实时数据的各种环境。 这些模式可用于消除与 NoSQL 中的 JOIN 操作相关的复杂性。 树图模式对于各种基于 JOIN 的繁重操作特别有用,例如人力资源、CMS、产品目录和社交网络。
关系数据库管理系统 (RDBMS) 不支持此模型,因为它基于一个不受任何人支持的模型。 数据存储可以通过多种方式完成,包括使用磁盘、内存或两者。 Redis Launchpad 有许多使用 NoSQL 和 Redis 编写的应用程序。
文档应用 Nosql 数据
使用文档应用程序存储数据的原因有很多。 首先,文档数据库非常灵活,可以方便地存储多种格式的数据。 这意味着您可以选择以 JSON、XML 甚至二进制格式存储数据。 其次,文档数据库通常比传统的关系数据库更容易扩展。 这是因为它们可以很容易地跨多个服务器进行分片。 最后,对于某些类型的查询,文档数据库通常比关系数据库提供更好的性能。
面向文档的数据库中的数据以 JSON 格式存储,而不是像其他现代数据库那样以列/行的形式存储。 这种类型的数据使您能够应对使用 RDBMS 难以掌握的挑战。 文档存储使开发人员成为自然且适应性强的解决方案,从而使开发人员能够更快地与敏捷软件进行协作。 富有表现力的查询语言和多方面的索引特性,使得多种方式的查询变得简单。 通过使用 ACID 事务,您可以保留您习惯于在关系数据库中拥有的所有保证。 由于分布式系统,您的数据可以变得无限可扩展和有弹性。 每个文档都单独存放,并且更容易跨服务器分布,以确保数据局部性不会受到影响。
与关系数据库相比,文档数据库使用直观、实用的建模,可以更快地阅读。 因为数据质量会降低,所以僵硬的表格会减少。 因为没有本地扩展,如果你想对你的传统关系数据库进行分区,你将不得不为昂贵的扩展系统买单。 面向文档的数据库中的每个文档存储都包含不同类型文档的字段,并且它们是可选的。 虽然每个文档具有相同的结构组成,但每个文档中都有不同的字段。 每个文档都有自己唯一的 ID,可以用来添加、更改、删除和查询信息。 通常假定文档编码包括一些标准格式或封装数据(或信息)的压缩。
面向文档的数据库与传统数据库的不同之处在于它们更加灵活并且不需要一致性。 不是将数据发送到数据库中的列,而是直接从文档中检索数据。 没有必要向每个数据集添加新的信息字段,只需在文档存储中添加相关的信息字段即可。
MongoDB和Sql的区别
重要的是要注意文件是不同的。 文档中可以包含的字段数没有限制。 文档类型还可以包含与其相关的字段。 例如,文档可以代表数据库中的客户。 该文件将包括客户的全名、地址和电话号码。 客户的订单历史和账户余额也可以包含在这些字段中。
MongoDB 和 SQL 的区别在于数据库不是表,文档也不是表。 MongoDB 没有像 SQL 那样的字段集合。 另一方面,文档集合由相关的字段组成。