使用 SDK 配置 Azure Cosmos DB for NoSQL 容器的索引策略
可以从任何 Azure Cosmos DB SDK 管理索引策略。 .NET SDK 专门包含了一组类,可用于构建新的索引策略,并将其推送到 Azure Cosmos DB for NoSQL 中的容器。
在此实验室中,你将使用 .NET SDK 为容器创建自定义索引策略
准备开发环境
如果你还没有将 DP-420 的实验室代码存储库克隆到使用此实验室的环境,请按照以下步骤操作。 否则,请在 Visual Studio Code 中打开以前克隆的文件夹。
-
启动 Visual Studio Code。
📝 如果你还不熟悉 Visual Studio Code 界面,请参阅 Visual Studio Code 入门指南
-
打开命令面板并运行 Git: Clone,将
https://github.com/microsoftlearning/dp-420-cosmos-db-dev
GitHub 存储库克隆到你选择的本地文件夹中。💡 你可以使用 Ctrl+Shift+P 键盘快捷方式打开命令面板。
-
克隆存储库后,打开在 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 帐户。
-
在新的 Web 浏览器窗口或选项卡中,导航到 Azure 门户 (
portal.azure.com
)。 -
使用与你的订阅关联的 Microsoft 凭证登录到门户。
-
选择“+ 创建资源”,搜索“Cosmos DB”,然后使用以下设置创建新的“Azure Cosmos DB for NoSQL”帐户资源,并将所有其余设置保留为默认值:
设置 值 订阅 你的现有 Azure 订阅 资源组 选择现有资源组,或创建新资源组 帐户名 输入全局唯一名称 位置 选择任何可用区域 容量模式 预配的吞吐量 应用免费分级折扣 不应用 📝 你的实验室环境可能存在阻止你创建新资源组的限制。 如果是这种情况,请使用现有的预先创建的资源组。
-
等待部署任务完成,然后继续执行此任务。
-
转到新创建的 Azure Cosmos DB 帐户资源,并导航到“键”窗格。
-
此窗格包含从 SDK 连接到帐户所需的连接详细信息和凭据。 具体而言:
-
请注意“URI”** 字段。 稍后在本练习中将用到此终结点值。
-
请注意“主键”** 字段。 稍后在本练习中将用到此键值。
-
-
返回到 Visual Studio Code。
使用 .NET SDK 创建新的索引策略
.NET SDK 包含一套与 Microsoft.Azure.Cosmos.IndexingPolicy 父类相关的类,用于在代码中构建新的索引策略。
-
在“资源管理器”** 窗格中,浏览到“12-custom-index-policy”** 文件夹。
-
打开 script.cs 代码文件。
-
更新名为 endpoint 的现有变量,将其值设置为前面创建的 Azure Cosmos DB 帐户的终结点 。
string endpoint = "<cosmos-endpoint>";
📝 例如,如果终结点为:https://dp420.documents.azure.com:443/,则 C# 语句将为:string endpoint = “https://dp420.documents.azure.com:443/”;。
-
更新名为 key 的现有变量,将其值设置为前面创建的 Azure Cosmos DB 帐户的键 。
string key = "<cosmos-key>";
📝 例如,如果键为:fDR2ci9QgkdkvERTQ==,则 C# 语句应为:string key = “fDR2ci9QgkdkvERTQ==”; 。
-
使用默认的空构造函数创建一个名为 policy 的的 IndexingPolicy 类型的新变量:
IndexingPolicy policy = new ();
-
将 policy 变量的 IndexingMode 属性设置为 IndexingMode.Consistent 的值:
policy.IndexingMode = IndexingMode.Consistent;
-
将 ExcludedPath 类型的新对象添加到 policy 变量中的 ExcludedPaths 集合属性,并将其 Path 属性设置为 /* 的值 :
policy.ExcludedPaths.Add( new ExcludedPath{ Path = "/*" } );
-
将 IncludedPath 类型的新对象(其 Path 属性设置为 /name/? 的值) 添加到 policy 变量中的 IncludedPaths 集合属性:
policy.IncludedPaths.Add( new IncludedPath{ Path = "/name/?" } );
-
创建一个名为 options 的 ContainerProperties 类型的新变量,并传入
products
和/categoryId
的值作为构造函数参数:ContainerProperties options = new ("products", "/categoryId");
-
将 policy 变量分配给 options 变量的 IndexingPolicy 属性 :
options.IndexingPolicy = policy;
-
异步调用 database 变量的 CreateContainerIfNotExistsAsync 方法,传入 options 变量作为构造函数参数,并将结果存储在一个名为 container 的 Container 类型的变量中 :
Container container = await database.CreateContainerIfNotExistsAsync(options);
-
使用内置的 Console.WriteLine 静态方法来输出 Container 类的 Id 属性,并标题设为 Container Created :
Console.WriteLine($"Container Created [{container.Id}]");
-
完成后,代码文件现在应包含:
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}]");
-
保存 script.cs 文件 。
-
在 Visual Studio Code 中,打开 12-custom-index-policy 文件夹的上下文菜单,然后选择“在集成终端中打开”以打开一个新的终端实例 。
-
使用 dotnet run 命令生成并运行项目:
dotnet run
-
该脚本现在将输出新创建的容器的名称:
Container Created [products]
-
关闭集成终端。
-
返回 Web 浏览器。
使用数据资源管理器观察由 .NET SDK 创建的索引策略
与任何其他索引策略一样,可以使用数据资源管理器查看使用 .NET SDK 推送的策略。 现在,你将使用门户查看在此实验室中使用代码创建的策略。
-
在 Azure Cosmos DB 帐户资源中,导航到“数据资源管理器”窗格 。
-
在“数据资源管理器”** 中,展开“cosmicworks”** 数据库节点,然后在“NoSQL API”** 导航树中观察新“products”** 容器节点。
-
在 NoSQL API 导航树的 products 容器节点内,选择“缩放和设置” 。
-
在“索引策略”部分中观察索引策略:
{ "indexingMode": "consistent", "automatic": true, "includedPaths": [ { "path": "/name/?" } ], "excludedPaths": [ { "path": "/*" }, { "path": "/\"_etag\"/?" } ] }
📝这是在此实验室中使用 .NET SDK 创建的索引策略的 JSON 表示形式。
-
关闭 Web 浏览器窗口或选项卡。