使用 SDK 配置 Azure Cosmos DB for NoSQL 容器的索引策略

可以从任何 Azure Cosmos DB SDK 管理索引策略。 .NET SDK 专门包含了一组类,可用于构建新的索引策略,并将其推送到 Azure Cosmos DB for NoSQL 中的容器。

在此实验室中,你将使用 .NET SDK 为容器创建自定义索引策略

准备开发环境

如果你还没有将 DP-420 的实验室代码存储库克隆到使用此实验室的环境,请按照以下步骤操作。 否则,请在 Visual Studio Code 中打开以前克隆的文件夹。

  1. 启动 Visual Studio Code。

    📝 如果你还不熟悉 Visual Studio Code 界面,请参阅 Visual Studio Code 入门指南

  2. 打开命令面板并运行 Git: Clone,将 https://github.com/microsoftlearning/dp-420-cosmos-db-dev GitHub 存储库克隆到你选择的本地文件夹中。

    💡 你可以使用 Ctrl+Shift+P 键盘快捷方式打开命令面板。

  3. 克隆存储库后,打开在 Visual Studio Code 中选择的本地文件夹。

创建 Azure Cosmos DB for NoSQL 帐户

Azure Cosmos DB 是一项基于云的 NoSQL 数据库服务,它支持多个 API。 在首次预配 Azure Cosmos DB 帐户时,可以选择希望该帐户支持的 API(例如 Mongo API 或 NoSQL API)。 完成 Azure Cosmos DB for NoSQL 帐户预配后,可以检索终结点和密钥,并使用它们通过 Azure SDK for .NET 或所选择的任何其他 SDK 连接到 Azure Cosmos DB for NoSQL 帐户。

  1. 在新的 Web 浏览器窗口或选项卡中,导航到 Azure 门户 (portal.azure.com)。

  2. 使用与你的订阅关联的 Microsoft 凭证登录到门户。

  3. 选择“+ 创建资源”,搜索“Cosmos DB”,然后使用以下设置创建新的“Azure Cosmos DB for NoSQL”帐户资源,并将所有其余设置保留为默认值:

    设置
    订阅 你的现有 Azure 订阅
    资源组 选择现有资源组,或创建新资源组
    帐户名 输入全局唯一名称
    位置 选择任何可用区域
    容量模式 预配的吞吐量
    应用免费分级折扣 不应用

    📝 你的实验室环境可能存在阻止你创建新资源组的限制。 如果是这种情况,请使用现有的预先创建的资源组。

  4. 等待部署任务完成,然后继续执行此任务。

  5. 转到新创建的 Azure Cosmos DB 帐户资源,并导航到“键”窗格。

  6. 此窗格包含从 SDK 连接到帐户所需的连接详细信息和凭据。 具体而言:

    1. 请注意“URI”** 字段。 稍后在本练习中将用到此终结点值。

    2. 请注意“主键”** 字段。 稍后在本练习中将用到此键值。

  7. 返回到 Visual Studio Code

使用 .NET SDK 创建新的索引策略

.NET SDK 包含一套与 Microsoft.Azure.Cosmos.IndexingPolicy 父类相关的类,用于在代码中构建新的索引策略。

  1. 在“资源管理器”** 窗格中,浏览到“12-custom-index-policy”** 文件夹。

  2. 打开 script.cs 代码文件。

  3. 更新名为 endpoint 的现有变量,将其值设置为前面创建的 Azure Cosmos DB 帐户的终结点 。

     string endpoint = "<cosmos-endpoint>";
    

    📝 例如,如果终结点为:https­://dp420.documents.azure.com:443/,则 C# 语句将为:string endpoint = “https­://dp420.documents.azure.com:443/”;。

  4. 更新名为 key 的现有变量,将其值设置为前面创建的 Azure Cosmos DB 帐户的键 。

     string key = "<cosmos-key>";
    

    📝 例如,如果键为:fDR2ci9QgkdkvERTQ==,则 C# 语句应为:string key = “fDR2ci9QgkdkvERTQ==”; 。

  5. 使用默认的空构造函数创建一个名为 policy 的的 IndexingPolicy 类型的新变量:

     IndexingPolicy policy = new ();
    
  6. 将 policy 变量的 IndexingMode 属性设置为 IndexingMode.Consistent 的值:

     policy.IndexingMode = IndexingMode.Consistent;
    
  7. ExcludedPath 类型的新对象添加到 policy 变量中的 ExcludedPaths 集合属性,并将其 Path 属性设置为 /* 的值 :

     policy.ExcludedPaths.Add(
         new ExcludedPath{ Path = "/*" }
     );
    
  8. IncludedPath 类型的新对象(其 Path 属性设置为 /name/? 的值) 添加到 policy 变量中的 IncludedPaths 集合属性:

     policy.IncludedPaths.Add(
         new IncludedPath{ Path = "/name/?" }
     );
    
  9. 创建一个名为 options 的 ContainerProperties 类型的新变量,并传入 products/categoryId 的值作为构造函数参数:

     ContainerProperties options = new ("products", "/categoryId");
    
  10. 将 policy 变量分配给 options 变量的 IndexingPolicy 属性 :

     options.IndexingPolicy = policy;
    
  11. 异步调用 database 变量的 CreateContainerIfNotExistsAsync 方法,传入 options 变量作为构造函数参数,并将结果存储在一个名为 container 的 Container 类型的变量中 :

     Container container = await database.CreateContainerIfNotExistsAsync(options);
    
  12. 使用内置的 Console.WriteLine 静态方法来输出 Container 类的 Id 属性,并标题设为 Container Created :

     Console.WriteLine($"Container Created [{container.Id}]");
    
  13. 完成后,代码文件现在应包含:

     using System;
     using Microsoft.Azure.Cosmos;
    
     string endpoint = "<cosmos-endpoint>";
    
     string key = "<cosmos-key>";
    
     CosmosClient client = new CosmosClient(endpoint, key);
    
     Database database = await client.CreateDatabaseIfNotExistsAsync("cosmicworks");
        
     IndexingPolicy policy = new ();
     policy.IndexingMode = IndexingMode.Consistent;
     policy.ExcludedPaths.Add(
         new ExcludedPath{ Path = "/*" }
     );
     policy.IncludedPaths.Add(
         new IncludedPath{ Path = "/name/?" }
     );
    
     ContainerProperties options = new ("products", "/categoryId");
     options.IndexingPolicy = policy;
    
     Container container = await database.CreateContainerIfNotExistsAsync(options);
     Console.WriteLine($"Container Created [{container.Id}]");
    
  14. 保存 script.cs 文件 。

  15. 在 Visual Studio Code 中,打开 12-custom-index-policy 文件夹的上下文菜单,然后选择“在集成终端中打开”以打开一个新的终端实例 。

  16. 使用 dotnet run 命令生成并运行项目:

     dotnet run
    
  17. 该脚本现在将输出新创建的容器的名称:

     Container Created [products]
    
  18. 关闭集成终端。

  19. 返回 Web 浏览器。

使用数据资源管理器观察由 .NET SDK 创建的索引策略

与任何其他索引策略一样,可以使用数据资源管理器查看使用 .NET SDK 推送的策略。 现在,你将使用门户查看在此实验室中使用代码创建的策略。

  1. 在 Azure Cosmos DB 帐户资源中,导航到“数据资源管理器”窗格 。

  2. 在“数据资源管理器”** 中,展开“cosmicworks”** 数据库节点,然后在“NoSQL API”** 导航树中观察新“products”** 容器节点。

  3. 在 NoSQL API 导航树的 products 容器节点内,选择“缩放和设置” 。

  4. 在“索引策略”部分中观察索引策略:

     {
       "indexingMode": "consistent",
       "automatic": true,
       "includedPaths": [
         {
           "path": "/name/?"
         }
       ],
       "excludedPaths": [
         {
           "path": "/*"
         },
         {
           "path": "/\"_etag\"/?"
         }
       ]
     }
    

    📝这是在此实验室中使用 .NET SDK 创建的索引策略的 JSON 表示形式。

  5. 关闭 Web 浏览器窗口或选项卡。