【发布时间】:2020-11-17 20:11:31
【问题描述】:
我是 CosmosDB 的新手,我正在尝试掌握 R/U 的设置限制。
情况
在 ASP.NET Core 2.1 应用程序中,我想一次插入 +/- 3000 个文档。循环这些项目并逐个添加它们需要几分钟的时间。所以散装可能是要走的路。我关注了一些资源,例如:
Bulk import data to Azure Cosmos DB SQL API account by using the .NET SDK on docs.microsoft.com
Introducing Bulk support in the .NET SDK
在我的代码中,我使用了博客中的示例代码。
List<Task> concurrentTasks = new List<Task>();
foreach (var entity in entities)
{
entity.Id = GenerateId(entity);
concurrentTasks.Add(Container.CreateItemAsync(entity, new PartitionKey(entity.RoleId)));
}
await Task.WhenAll(concurrentTasks);
将一个文档从我的本地开发机器插入 Azure 大约需要 6 个 R/U。
当我每秒配置默认的 400 R/U 时,我很快就会收到 429 Too Many Requests 异常。当我切换到自动缩放时,它会在大约 20 秒内完成,无一例外。
我的问题是:如果我想限制 R/U 并且仍然使用这种 concurrentTasks 方法,SDK 会进行重试处理吗?还是我需要自己编写 429-retry。
【问题讨论】:
-
您应该能够使用 Fiddler 来确定是否正在发生重试。顺便说一句,我在使用this stored procedure 进行批量操作方面取得了巨大成功。它速度快如闪电,而且发生在服务器端,所以没有 429。
标签: c# .net-core azure-cosmosdb bulkinsert azure-cosmosdb-sqlapi