【问题标题】:CreateDocumentCollectionIfNotExistsAsync does not always workCreateDocumentCollectionIfNotExistsAsync 并不总是有效
【发布时间】:2017-07-08 22:29:29
【问题描述】:

如果不存在,我正在尝试创建一个集合。

首先,我通过以下方式创建我的 DocumentClient:

public DocumentClient CreateClient(ConnectionPolicy connectionPolicy = null)
{
   return new DocumentClient(new Uri(this.AccountEndpoint), this.AccountKey, connectionPolicy);
}

现在我有了我的文档客户端(我们称之为documentDbClient),我尝试使用CreateDocumentCollectionIfNotExistsAsync

var documentDbClient = dbConnection.CreateClient();

await documentDbClient.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri("mydatabase"),
            new DocumentCollection { Id = "testcollection" });

现在,我希望这会在名为 mydatabase 的数据库下创建一个名为 testcollection 的集合。然而,什么也没有发生。不创建集合,不抛出异常。

我想也许只是太慢了,所以我等了 30 分钟,然后回到传送门,看看我的收藏是否已经完成......

没有。

怎么了?

更新

好的,所以我发现如果我更改我尝试创建的集合的名称,它就可以工作。我之前曾多次创建和删除该集合,现在看来 Azure 90% 的时间都无法创建它。

【问题讨论】:

  • 您是否在反复创建和删除同一个文档,就像在单元测试的情况下一样?每分钟或每小时多次?
  • @DavidMakogon 是的,这就是我正在做的事情。
  • @DavidMakogon 每小时多次会更准确。
  • 如果测试的随机集合 id 可以接受,我们可以使用随机集合 id 进行测试。

标签: c# azure azure-cosmosdb


【解决方案1】:

因此,在重复创建和销毁集合时,您可能会遇到限制情况。以下是FAQ 的 Table API 部分的摘录(同样适用于文档集合):

检测并限制快速创建表的速度。我们 建议您查看创建表的速率并降低它 低于每分钟 5 个。

当前的节流速率为 5 次创建/分钟。因此,对于单元测试场景,您需要解决这个问题(例如,保留一个集合,但在每次测试运行后清空其内容)。

注意:我已通知产品团队,限制提及仅在 Table API 部分中,并相应地更新常见问题解答。

【讨论】:

  • 谢谢。但是,我肯定不会尝试每分钟创建 5 次集合。更像是每 10 分钟一次。也许对集合的限制更严重?此外,我在一天后尝试了,我使用的集合名称不再有效。我可以通过门户创建它,但不能通过代码创建。不知道发生了什么!
【解决方案2】:

您应该在数据库创建的末尾添加一个 .Wait(),然后再创建集合。这将等待两个任务完成。

_client.CreateDatabaseIfNotExistsAsync(new Database { Id = "dbName" }).Wait();

_client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri("dbName"), new DocumentCollection { Id = "collectionName" }).Wait();

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 2012-04-23
    • 2015-06-28
    • 2015-12-04
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多