Azure Cosmos DB 资源模型

适用对象: NoSQL MongoDB Cassandra Gremlin

Azure Cosmos DB 是完全托管的平台即服务 (PaaS)。 若要开始使用 Azure Cosmos DB,请在订阅的 Azure 资源组中创建一个 Azure Cosmos DB 帐户。 然后,在帐户中创建数据库和容器。

Azure Cosmos DB 帐户包含唯一的 DNS 名称,可以使用 Azure 门户、ARM 或 Bicep 模板、Azure PowerShell、Azure CLI 或任何 Azure 管理 SDK 或 REST API 进行管理。 有关详细信息,请参阅如何管理 Azure Cosmos DB 帐户。 要在多个 Azure 区域之间复制数据和吞吐量,可随时在帐户中添加和删除 Azure 区域。 可将帐户配置为使用单区域或多个写入区域。 有关详细信息,请参阅如何在帐户中添加和删除 Azure 区域。 可在帐户中配置默认一致性级别。

Azure Cosmos DB 帐户中的元素

目前,最多可在一个 Azure 订阅下创建 50 个 Azure Cosmos DB 帐户(这是一项软限制,可通过支持请求上调)。 单个 Azure Cosmos DB 帐户几乎可以管理无限量的数据和预配吞吐量。 若要管理数据和预配吞吐量,可以在帐户中创建一个或多个数据库,然后可以创建一个或多个容器用于存储数据。 下图显示了 Azure Cosmos DB 帐户中的元素层次结构:

Hierarchy of an Azure Cosmos DB account

下图显示 Azure Cosmos DB 帐户中不同实体的层次结构:

Azure Cosmos DB account entities

Azure Cosmos DB 数据库

在 Azure Cosmos DB 中,数据库类似于命名空间。 数据库只是一组容器。 下表显示如何将数据库映射到各种特定于 API 的实体:

Azure Cosmos DB 实体 API for NoSQL API for Apache Cassandra 适用于 MongoDB 的 API API for Apache Gremlin API for Table
Azure Cosmos DB 数据库 数据库 密钥空间 数据库 数据库 不可用

注意

对于 API for Table 帐户,为了维护与 Azure 存储表的兼容性,Azure Cosmos DB 中的表在帐户级别上进行创建。

Azure Cosmos DB 容器

Azure Cosmos DB 容器用于存储数据。 与具有较大 VM 大小的纵向扩展的大多数关系数据库不同,Azure Cosmos DB 为横向扩展。数据存储在一个或多个服务器上,称为分区。 为了增加吞吐量或存储,会添加更多分区。 这为容器提供了几乎无限量的吞吐量和存储。 创建容器时,需要提供分区键。 这是从文档中选择的要存储的属性。 然后,该属性的值用于将数据路由到要写入、更新或删除的分区。 它还可用于查询中的 WHERE 子句,以实现高效数据检索。

Azure Cosmos DB 中数据的基础存储机制称为物理分区。 这些可以具有高达 10,000 RU/s 的吞吐量并存储多达 50 GB 的数据。 Azure Cosmos DB 使用可存储多达 20 GB 数据的逻辑分区对此进行抽象。 随着添加更多分区,逻辑分区允许服务为基础物理分区上的数据提供更大的弹性和更好的管理。 若要详细了解分区和分区键,请参阅将数据分区

创建容器时,会在以下某种模式下配置吞吐量:

  • 专用吞吐量:对容器预配的吞吐量专门保留给该容器使用。 有两种类型的专用吞吐量:标准和自动缩放。 有关详细信息,请参阅如何对容器预配吞吐量

  • 共享吞吐量:此处的吞吐量是在数据库级别指定的,然后与数据库中最多 25 个容器共享(不包括已配置专用吞吐量的容器)。 如果数据库中的所有容器具有类似的请求和存储需求,或者不需要可预测数据性能,则此选项可能是一个不错的选择。 有关详细信息,请参阅如何对数据库预配吞吐量

注意

不能在专用吞吐量和共享吞吐量之间切换。 在共享吞吐量数据库中创建的容器不能更新为具有专用吞吐量。 若要将容器从共享吞吐量更改为专用吞吐量,必须创建一个新容器并将数据复制到该容器。

容器与架构无关。 容器中的项可以具有任意架构或不同的实体,只要它们共享相同的分区键。 例如,一个代表客户的项和一个或多个代表其所有订单的项可以放置在同一容器中。 默认情况下,添加到容器中的所有数据都会自动编制索引,而无需显式索引。 可以通过配置容器的索引策略来自定义容器的索引。

可以针对容器中的选定项或整个容器设置生存时间 (TTL),以在未使用吞吐量的情况下,在后台自动以无提示方式删除这些项,以避免影响性能。 但是,即使未删除,任何已过期的数据也不会显示在任何读取操作中。 有关详细信息,请参阅对容器配置 TTL

Azure Cosmos DB 提供一种称为更改源的内置变更数据捕获功能,可用于订阅对容器中数据的所有更改。 有关详细信息,请参阅 Azure Cosmos DB 中的更改源

可为容器注册存储过程、触发器、用户定义的函数 (UDF)合并过程

容器中的数据必须具有每个逻辑分区键值的唯一 id 属性值。 如果想要在容器中具有唯一约束,这非常有用。 还可以在 Azure Cosmos DB 容器上指定唯一键约束,该容器使用一个或多个不同的属性,并确保每个逻辑分区键的一个或多个值的唯一性。 如果使用唯一键策略创建容器,则无法创建值与唯一键约束指定的值重复的任何新项或更新的项。 若要了解详细信息,请参阅唯一键约束

容器专用于 API 特定的实体,如下表所示:

Azure Cosmos DB 实体 API for NoSQL API for Cassandra 适用于 MongoDB 的 API API for Gremlin API for Table
Azure Cosmos DB 容器 容器 集合 Graph

注意

创建容器时,请确保不创建名称相同但大小写不同的两个容器。 Azure 平台的某些部分不区分大小写,这可能会在具有此类名称的容器上导致遥测和操作混乱/冲突。

Azure Cosmos DB 容器的属性

Azure Cosmos DB 容器具备一组系统定义的属性。 根据所用的 API,某些属性可能不会直接公开。 下表介绍了系统定义属性的列表:

系统定义的属性 由系统生成或用户可配置 目的 API for NoSQL API for Cassandra 适用于 MongoDB 的 API API for Gremlin API for Table
_rid 由系统生成 容器的唯一标识符 No No No
_etag 由系统生成 用于乐观并发控制的实体标记 No No No
_ts 由系统生成 容器上次更新的时间戳 No No No
_self 由系统生成 容器的可寻址 URI No No No
id 用户可配置 容器的名称
indexingPolicy 用户可配置 提供更改索引的功能
TimeToLive 用户可配置 提供在设置的时间段后从容器自动删除项的功能 有关详细信息,请参阅生存时间 No No No
changeFeedPolicy 用户可配置 用于读取对容器中的项所做的更改。 有关详细信息,请参阅更改源 No No No
uniqueKeyPolicy 用户可配置 用于确保逻辑分区中一个或多个值的唯一性。 有关详细信息,请参阅唯一键约束 No No No
AnalyticalTimeToLive 用户可配置 提供在设置的时间段后从容器自动删除项的功能 No

Azure Cosmos DB 项

根据所使用的 API,数据可以表示容器中的一个项、集合中的一个文件、表格中的一行或者图形中的一个节点或边缘。 下表显示了 API 特定的实体与 Azure Cosmos DB 项之间的映射:

Azure Cosmos DB 实体 API for NoSQL API for Cassandra 适用于 MongoDB 的 API API for Gremlin API for Table
Azure Cosmos DB 项 项目 文档 节点或边缘 项目

项的属性

每个 Azure Cosmos DB 项都具有以下系统定义的属性。 根据所用的 API,其中的某些属性可能不会直接公开。

系统定义的属性 系统生成或用户定义 目的 API for NoSQL API for Cassandra DB API for MongoDB API for Gremlin API for Table
_rid 由系统生成 项的唯一标识符 No No No
_etag 由系统生成 用于乐观并发控制的实体标记 No No No
_ts 由系统生成 项上次更新的时间戳 No No No
_self 由系统生成 项的可寻址 URI No No No
id 任一个 逻辑分区中用户定义的唯一名称。
任意用户定义的属性 用户定义 用户定义的属性以 API 本机表示形式表示(包括 JSON、BSON 和 CQL)

注意

id 属性的唯一性在每个逻辑分区中强制实施。 多个文档可以具有相同的 id 属性,但具有不同的分区键值。

对项执行的操作

Azure Cosmos DB 项支持以下操作。 可以使用任一 Azure Cosmos DB API 来执行这些操作。

操作 API for NoSQL API for Cassandra 适用于 MongoDB 的 API API for Gremlin API for Table
插入、替换、删除、Upsert、读取

后续步骤

了解如何管理 Azure Cosmos DB 帐户及其他概念: