【问题标题】:Provisioned throughput collection should have a partition key error when creating partitionless collection创建无分区集合时,预置吞吐量集合应该有分区键错误
【发布时间】:2019-12-06 11:36:57
【问题描述】:

我创建了一个文档数据库数据库,其中 RU 在数据库级别而不是容器级别共享。是否可以在同一个数据库下创建没有分区的集合?当我尝试对下面的代码执行相同操作时,出现错误

预置吞吐量集合应该有一个分区键

private async Task CreatePartitionLessCollection()
{
    try
    {
        DocumentClient documentClient = new DocumentClient(new Uri(EndpointUrl), PrimaryKey);
        DocumentCollection myCollection = new DocumentCollection();
        myCollection.Id = "MyCollection";
        await documentClient.CreateDocumentCollectionAsync(
                UriFactory.CreateDatabaseUri("MyDB"), myCollection, new RequestOptions { OfferThroughput = 400 });
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.GetBaseException().Message);
    }
 }

【问题讨论】:

    标签: c# azure-cosmosdb


    【解决方案1】:

    在我这边重现您的问题,这表明我们无法在没有分区键的情况下创建预置吞吐量集合。因为db级别的吞吐量设置将在所有内部共享 收藏:

    请参阅document 了解设置数据库级别或容器级别吞吐量的选择。如果您想创建一些分区集合和一些非分区集合,您可以尝试在集合级别进行设置。

    一些关键语句:

    为单个容器提供吞吐量将保证 为特定 Cosmos DB 容器预留吞吐量(即 由吞吐量 SLA 支持的表、集合或图表) 那个容器。这使您可以细粒度地控制 您希望容器在任何给定时间点的吞吐量。在 另一方面,在 Cosmos DB 数据库上预配吞吐量, 允许您在所有容器之间共享吞吐量 属于那个数据库。这允许您将预置的 跨 Cosmos DB 数据库中的一组容器的吞吐量。

    【讨论】:

    • 我同意吞吐量是共享的。就我而言,我想要一个非分区集合。可能是我对分区和吞吐量共享的理解是错误的。
    • @ArjunMenon 如果要设置非分区集合,为什么不在集合级别而不是数据库级别设置吞吐量?
    • 系统是现有系统,为了进行批量更新,我们在 docDB 中编写了 SP,它与分区集合存在一些问题。
    猜你喜欢
    • 2021-12-12
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多