在 Azure Cosmos DB - API for NoSQL 中的数据库或容器上预配自动缩放吞吐量

适用于: NoSQL

本文介绍如何在 Azure Cosmos DB for NoSQL 中的数据库或容器(集合、图或表)上预配自动缩放吞吐量。 可以为单个容器启用自动缩放,也可以为某个数据库预配自动缩放吞吐量,然后在该数据库中的所有容器之间共享此吞吐量。

如果使用的是其他 API,请参阅 API for MongoDBAPI for CassandraAPI for Gremlin 这几篇文章来预配吞吐量。

Azure 门户

创建支持自动缩放的新数据库或容器

  1. 登录到 Azure 门户

  2. 导航到你的 Azure Cosmos DB 帐户,打开“数据资源管理器”选项卡。

  3. 选择“新建容器”。输入数据库、容器和分区键的名称。 在数据库或容器吞吐量下选择“自动缩放”选项,并设置希望数据库或容器缩放到的最大吞吐量(RU/秒)

    Creating a container and configuring autoscale provisioned throughput

  4. 选择“确定”

若要在共享吞吐量数据库上预配自动缩放,请在创建新数据库时选择“预配数据库吞吐量”选项。

在现有的数据库或容器上启用自动缩放

  1. 登录到 Azure 门户

  2. 导航到你的 Azure Cosmos DB 帐户,打开“数据资源管理器”选项卡。

  3. 为你的容器选择“缩放和设置”,或者为你的数据库选择“缩放”。

  4. 在“缩放”下,依次选择“自动缩放”选项、“保存”。

    Enabling autoscale on an existing container

注意

在现有数据库或容器上启用自动缩放时,最大 RU/秒的起始值由系统根据当前手动预配的吞吐量设置和存储确定。 在操作完成后,你可以根据需要更改最大 RU/秒。

Azure Cosmos DB .NET V3 SDK

可以使用适用于 API for NoSQL 的 Azure Cosmos DB .NET SDK 3.9 或更高版本来管理自动缩放资源。

重要

可以使用该 .NET SDK 创建新的自动缩放资源。 该 SDK 不支持在自动缩放与标准(手动)吞吐量之间迁移。 目前只有 Azure 门户CLIPowerShell 支持迁移方案。

创建具有共享吞吐量的数据库

// Create instance of CosmosClient
CosmosClient cosmosClient = new CosmosClient(Endpoint, PrimaryKey);
 
// Autoscale throughput settings
ThroughputProperties autoscaleThroughputProperties = ThroughputProperties.CreateAutoscaleThroughput(1000); //Set autoscale max RU/s

//Create the database with autoscale enabled
database = await cosmosClient.CreateDatabaseAsync(DatabaseName, throughputProperties: autoscaleThroughputProperties);

创建具有专用吞吐量的容器

// Get reference to database that container will be created in
Database database = await cosmosClient.GetDatabase("DatabaseName");

// Container and autoscale throughput settings
ContainerProperties autoscaleContainerProperties = new ContainerProperties("ContainerName", "/partitionKey");
ThroughputProperties autoscaleThroughputProperties = ThroughputProperties.CreateAutoscaleThroughput(1000); //Set autoscale max RU/s

// Create the container with autoscale enabled
container = await database.CreateContainerAsync(autoscaleContainerProperties, autoscaleThroughputProperties);

读取当前吞吐量(RU/秒)

// Get a reference to the resource
Container container = cosmosClient.GetDatabase("DatabaseName").GetContainer("ContainerName");

// Read the throughput on a resource
ThroughputProperties autoscaleContainerThroughput = await container.ReadThroughputAsync(requestOptions: null); 

// The autoscale max throughput (RU/s) of the resource
int? autoscaleMaxThroughput = autoscaleContainerThroughput.AutoscaleMaxThroughput;

// The throughput (RU/s) the resource is currently scaled to
int? currentThroughput = autoscaleContainerThroughput.Throughput;

更改自动缩放最大吞吐量(RU/秒)

// Change the autoscale max throughput (RU/s)
await container.ReplaceThroughputAsync(ThroughputProperties.CreateAutoscaleThroughput(newAutoscaleMaxThroughput));

Azure Cosmos DB Java V4 SDK

可以使用适用于 API for NoSQL 的 Azure Cosmos DB Java SDK 4.0 或更高版本来管理自动缩放资源。

重要

可以使用该 Java SDK 创建新的自动缩放资源。 该 SDK 不支持在自动缩放与标准(手动)吞吐量之间迁移。 目前只有 Azure 门户CLIPowerShell 支持迁移方案。

创建具有共享吞吐量的数据库

// Create instance of CosmosClient
CosmosAsyncClient client = new CosmosClientBuilder()
    .setEndpoint(HOST)
    .setKey(PRIMARYKEY)
    .setConnectionPolicy(CONNECTIONPOLICY)
    .buildAsyncClient();

// Autoscale throughput settings
ThroughputProperties autoscaleThroughputProperties = ThroughputProperties.createAutoscaledThroughput(1000); //Set autoscale max RU/s

//Create the database with autoscale enabled
CosmosAsyncDatabase database = client.createDatabase(databaseName, autoscaleThroughputProperties).block().getDatabase();

创建具有专用吞吐量的容器

// Get reference to database that container will be created in
CosmosAsyncDatabase database = client.createDatabase("DatabaseName").block().getDatabase();

// Container and autoscale throughput settings
CosmosContainerProperties autoscaleContainerProperties = new CosmosContainerProperties("ContainerName", "/partitionKey");
ThroughputProperties autoscaleThroughputProperties = ThroughputProperties.createAutoscaledThroughput(1000); //Set autoscale max RU/s

// Create the container with autoscale enabled
CosmosAsyncContainer container = database.createContainer(autoscaleContainerProperties, autoscaleThroughputProperties, new CosmosContainerRequestOptions())
                                .block()
                                .getContainer();

读取当前吞吐量(RU/秒)

// Get a reference to the resource
CosmosAsyncContainer container = client.getDatabase("DatabaseName").getContainer("ContainerName");

// Read the throughput on a resource
ThroughputProperties autoscaleContainerThroughput = container.readThroughput().block().getProperties();

// The autoscale max throughput (RU/s) of the resource
int autoscaleMaxThroughput = autoscaleContainerThroughput.getAutoscaleMaxThroughput();

// The throughput (RU/s) the resource is currently scaled to
int currentThroughput = autoscaleContainerThroughput.Throughput;

更改自动缩放最大吞吐量(RU/秒)

// Change the autoscale max throughput (RU/s)
container.replaceThroughput(ThroughputProperties.createAutoscaledThroughput(newAutoscaleMaxThroughput)).block();

Azure 资源管理器

Azure 资源管理器模板可用于在新数据库或容器级别的资源上为所有 Azure Cosmos DB API 预配自动缩放吞吐量。 有关示例,请参阅 Azure Cosmos DB 的 Azure 资源管理器模板。 按照设计,Azure 资源管理器模板不能用于在现有资源上进行预配吞吐量和自动缩放吞吐量之间的迁移。

Azure CLI

Azure CLI 可用于为所有 Azure Cosmos DB API 在新数据库或容器级资源上预配自动缩放吞吐量,或在现有资源上启用自动缩放。 有关示例,请参阅用于 Azure Cosmos DB 的 Azure CLI 示例

Azure PowerShell

Azure PowerShell 可用于在新数据库或容器级别的资源上为所有 Azure Cosmos DB API 预配自动缩放吞吐量,或在现有资源上启用自动缩放。 有关示例,请参阅适用于 Azure Cosmos DB 的 Azure PowerShell 示例

后续步骤