创建 Cosmos DB 实例

已完成

在本单元中,你将了解 Azure Cosmos DB 以及它如何整理数据。 你将了解如何使用 Visual Studio Code 创建和维护 Azure Cosmos DB 数据库和容器。

什么是 Azure Cosmos DB?

Azure Cosmos DB 是一种实现文档数据库的云服务。 文档中的数据必须符合 JSON 语法。 JSON 文档可以包含文档的属性、子文档和数组。

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "partitionKey": "Bikes",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 }
      ]
}

与关系数据库中的表不同,Azure Cosmos DB 中的文档不遵循预定义架构。 这使数据库可以保存具有不同形状和大小的各种文档。 例如,你可以在同一数据库中存储不同客户的各种信息。 你也可以将完整的地址历史记录记录为客户数组。 你可以记录客户的信贷可靠性等其他信息。

Azure Cosmos DB 云服务以层次结构的形式组织。 顶部是 Azure Cosmos DB 帐户(你的资源)。 Azure Cosmos DB 帐户是一组数据库的安全单元。 Azure Cosmos DB 帐户指定数据库的位置以及访问这些数据库所需的安全信息。 在一个帐户中,可以创建一个或多个数据库。 你可以在每个数据库中创建一个或多个容器。 你可以将文档存储在容器中。

Conceptual image of parent-child relationship of account, database, and container in Cosmos D B.

Cosmos DB 容器和分区键

每个容器以一系列分区的形式组织。 分区大致对应于磁盘上的物理文件。 大分区可能有自己的文件,但多个小分区可以合并为一个文件。 每个文档都有一个分区键,用于定义其所属的分区。 你可以使用分区将相关文档存储在一起,以及帮助优化数据访问方式。

以下示例演示了一个 JSON 文档,该文档将产品信息作为 Contoso 应用程序的一部分进行存储。 由于此数据来自另一个系统,因此 ID 已配置为 GUID。 在你自己的容器中,可以引入你的 ID,或允许 Cosmos DB 提供一个 ID。 插入新文档时,需要提供 ID 和分区键(如果使用分区键)。

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "categoryName": "Bikes, Touring Bikes",
    "sku": "BK-T79U-50",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "tags": [
        {
            "_id": "27B7F8D5-1009-45B8-88F5-41008A0F0393",
            "name": "Tag-61"
        }
    ],
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 },
        { "location": "Boston", "inventory": 4 },
        { "location": "Miami", "inventory": 12 },
        { "location": "San Diego", "inventory": 58 }
      ]
}

Contoso 公司决定使用类别名称 categoryName 作为分区键,因为这规定文档在容器中进行某种程度的均匀分布。 创建容器时,会为容器设置分区键字段。 对于插入到容器中的每个新文档,分区键会作为 JSON 文档的一部分包含在内。 在上面的示例中,格式正确的文档的最低要求是唯一 id,并且 idcategoryName 作为分区键。 如果从另一个系统引入数据集并且要保留其唯一 ID 以连接到其他系统,可以选择使用 id 字段或允许 Cosmos DB 创建新的唯一 id 属性,并且 ID 可以存储在单独的属性名称中。

注意

Azure Cosmos DB 会将自己的一些字段添加到文档。 其中许多字段用于内部,在大多数情况下不应直接修改它们。 名为 id 的字段除外。Azure Cosmos DB 使用此字段来标识数据库中的文档,且每个文档必须具有唯一 id。

Azure Cosmos DB 吞吐量成本

Azure Cosmos DB 使用每秒请求单位 (RU/s) 概念来管理数据库的性能和计费。 此度量值可抽象概括出为支持所需性能需要预配的基础物理资源。 创建数据库或容器时,请指定要分配的 RU/s。 系统会相应地向你收取费用。

对于一个 1 KB 的项,执行点读取(按 ID 和分区键值提取单个项)的成本是 1 个请求单位(或 1 RU)。 以类似方式为其他所有数据库操作分配 RU 成本。 不管使用哪个 API 来与 Azure Cosmos DB 容器和数据库操作交互,都始终以 RU 来计量成本。 无论数据库操作是写入、点读取还是查询,都始终以 RU 来计量成本。

如果预配 400 RU/秒的吞吐量并发出成本为 40 RU 的查询,则每秒可以发出 10 个此类查询。 超过该限制的任何请求将受到速率限制,应重试该请求。 如果使用客户端驱动程序,它们支持自动重试逻辑。

若要使 RU/s 尽可能低,请考虑以下事项:

Object 注意事项
文档大小 以 KB 为单位的较大文档会增加 RU。
文档索引 性能索引可以减少 RU。
文档属性计数 如果为所有属性编制索引,则使用较多属性会增加 RU。 选择性地对键属性编制索引会需要较少的 RU。
数据一致性 强一致性级别和有限一致性级别使用的 RU 数比其他松弛一致性级别更多。
文档读取的类型 使用项的 ID 和分区键进行点读取所消耗的 RU 数比查询少得多。
查询模式 查询的复杂性会影响使用的 RU 数。
脚本使用情况 除了这些脚本中的查询之外,存储过程、触发器和用户定义的函数还使用 RU。

访问 Cosmos DB

Azure Cosmos DB 包括以下用于连接到 Cosmos DB 的方法:

  • Visual Studio Code
  • JavaScript(和其他语言)SDK
  • Azure 门户
  • Azure CLI
  • PowerShell
  • REST API

Azure Cosmos DB API

Azure Cosmos DB 支持多个编程 API。 这些 API 会尽可能地与其他常见 NoSQL 数据库所使用的 API 保持一致。 其目的是提供一个从这些数据库迁移到 Azure Cosmos DB 的简单路径,使开发人员无需了解新模式或对其应用程序进行重大更改。 目前支持的 API 如下:

  • Core (SQL)
  • MongoDB
  • Cassandra
  • Gremlin(通用图形 DB API)
  • Azure 表存储

Core (SQL) API 是大多数关系数据库管理系统所使用的 SQL 语言的变体。 相较于表的处理,无架构文档集的处理有一些限制和调整。

使用 Visual Studio Code 管理 Azure Cosmos DB

使用 Visual Studio Code 作为开发环境时,可以安装 Azure 数据库扩展生成 Azure Cosmos DB 数据库和应用程序。

Screenshot of the Azure Databases extension in Visual Studio Code marketplace

你可以从扩展市场安装适用于 Visual Studio Code 的扩展。 安装数据库扩展后,可使用 Azure 资源管理器 (Shift + Alt + A) 来使用 Cosmos DB 扩展。

从 Azure 资源管理器管理 Cosmos DB

Visual Studio Code 的 Azure 资源管理器中的数据库扩展提供了与 Visual Studio Code 集成的图形用户界面。 使用扩展,可以创建、删除和管理 Azure Cosmos DB 帐户、数据库、容器和文档。

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the Documents node for a contextual menu to create a new document.

在门户中访问帐户

扩展还提供在 Azure 门户中打开帐户的功能,从而使你可以轻松访问 Cosmos DB 的所有功能。 右键单击帐户并选择“在门户中打开”时,可以访问此功能。

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the account node to open account in Azure portal.

通过门户可以访问 Cosmos DB 的所有配置,以及数据库和容器的数据资源管理器。 使用数据资源管理器可插入、更新、删除和查询数据。

Screenshot of the Azure portal with the Data Explorer showing the query window open with a JSON document displayed.