📜  Azure Cosmos DB 简介

📅  最后修改于: 2022-05-13 01:57:42.751000             🧑  作者: Mango

Azure Cosmos DB 简介

CosmosDB 是 Azure 的 NoSQL 数据库。在本文中,我们将讨论高级水平扩展、复制、分区和数据库模式。然后我们将深入探讨 Cosmos DB 支持的一些数据模型。那么,让我们开始吧。

应用程序过去相对简单。我们将有一个应用程序、一个 API 层和缓慢滴入数据库的数据。现在,有时我们可能需要显示这些数据并在目录中查找设备信息或在日历上查找约会。但通常数据一直保存在数据库中,直到数天、数月甚至数年后才被调用。

在大数据时代,对于我们一些最苛刻的应用程序,数据集现在已经从几 GB 增长到数十 GB 甚至 PB。数据正涌入我们的数据库,应用程序要求快速、频繁地显示数据,以满足用户对个性化和快速应用程序体验的期望。

现在,Azure Cosmos DB 作为云原生应用程序大数据需求的解决方案而蓬勃发展。因为像 Azure Cosmos DB 这样的非关系型或 NoSQL 数据库是水平扩展的,而不是垂直扩展的,所以我们基本上可以不限制数据库中的吞吐量和数据量。 Cosmos DB 不是在单个节点上升级硬件以更快地处理请求,而是将工作分布在多个节点上,以便可以同时处理请求。横向扩展和纵向扩展是关系数据库和 Cosmos DB 等非关系数据库之间的最大区别。

水平扩展或横向扩展是两种技术的结果:分区复制。现在 Azure Cosmos DB 中有两种分区:逻辑分区和物理分区。

物理分区是物理上位于我们指定的 Azure 区域中的实际存储单元。这是一个将我们的数据保存在云端某处的硬件。逻辑分区是跨数据集中项目的逻辑组,我们通过称为分区键的东西引用这些组。分区键很重要,因为它告诉我们的数据库引擎在哪里查找我们的数据。选择正确的分区键是优化数据库的一个简单但重要的部分,如果做得正确,我们可以期望看到与服务请求的额外节点数量成正比的性能提升。简而言之,跨节点对数据进行分区可以提高数据库延迟和吞吐量。

现在与分区一样,Cosmos DB 中也有两种复制:区域内的复制和区域外的异地复制。现在在一个区域内,我们的数据被复制四次作为冗余措施,提高了容错能力。在区域之外,我们的数据被异地复制到我们选择的任何其他 Azure 区域,从而提高可用性。单个区域内的复制增加了容错性。到其他 Azure 区域的异地复制提高了可用性。现在,复制和分区这两种技术在很大程度上使水平扩展成为可能。

现在,除了性能和可用性提升之外,NoSQL 对现代运维开发人员有吸引力的原因在于保持数据关系的宽松约束。 Cosmos DB 是无模式的意思是结构不会对进入数据库的任何数据强制执行。同一个集合中的两个文档可以具有完全不同的结构,没有任何问题。因此,开发人员可以将结构可变的数据放入数据库,然后随着数据的发展而构建、更改或添加功能。灵活模式和水平扩展的这种组合使 NoSQL 与众不同。

Cosmos DB 可以轻松摄取和重新呈现大量可变数据,而不会影响性能或可用性。除了灵活的模式,Cosmos 还支持多种数据模型。 Cosmos 已构建为所有 NoSQL 数据类型的中心。

Cosmos 有一个 SQL API,内置了文档和键值支持。在大多数 NoSQL 数据库中,文档和键值对是齐头并进的,因为文档只是键值对,其中键是文档,值是我们称之为文档的 JSON 对象。现在,为了获得真正键值存储的性能优势,使用 SQL API,只要我们知道要读取的项目的文档 ID 和分区键,我们就可以进行快速且经济高效的点读取。这是一个很好的应用程序优化工具。下一个数据模型,图形数据模型,可以通过 Gremlin API 访问,它使用边和顶点以及遍历来对具有多对多关系的复杂系统进行建模。将图视为网络或节点网络。 API 分别用于 Mongo DB 和 Cassandra,以便熟悉这两个开源数据库的开发人员可以使用他们已经习惯的工具、SDK 和驱动程序。用于 Mongo DB 的 API 还利用文档和 Cassandra API 是一个宽列存储,它可以有效地将数据定向到列而不是行中,以优化分析。这就是我们的第一集。 Cosmos DB 是我们的水平扩展 NoSQL 数据库。分区使其快速,复制使其可用,灵活的模式使其易于使用。