目标
使用 C#、.NET Core 2.2 将超过 100 万个文档导入 Azure Cosmos DB。
我尝试过的
我正在使用 Azure Cosmos Bulk Executor 库。我在这里关注示例 - https://learn.microsoft.com/en-us/azure/cosmos-db/bulk-executor-dot-net ,例如
// Set retry options high during initialization (default values).
client.ConnectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 30;
client.ConnectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 9;
IBulkExecutor bulkExecutor = new BulkExecutor(client, dataCollection);
await bulkExecutor.InitializeAsync();
// Set retries to 0 to pass complete control to bulk executor.
client.ConnectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 0;
client.ConnectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 0;
接下来我跑
var bulkImportResponse = await bulkExecutor.BulkImportAsync(documents, true);
if ((bulkImportResponse.NumberOfDocumentsImported < documents.Count) ||
(bulkImportResponse.BadInputDocuments?.Count > 0))
{
// Logging, exception throwing, etc.
}
问题
我已经为同一个源数据运行了多次导入。
- 导入后,Cosmos 集合具有正确数量的文档(即 1237278)。
- 但是,
bulkImportResponse.NumberOfDocumentsImported
通常(但不总是)比这个少大约一千或 0.1%。例如。最后一次运行是 1236175。bulkImportResponse.BadInputDocuments
始终为 null。
问题
问题 1:有谁知道导入是否出了问题,或者只是 bulkImportResponse.NumberOfDocumentsImported
值不正确。
Q2:如果这1000个文档有问题,有什么办法可以得到哪些文档可能有问题的日志。在上面的导入过程中没有写入任何消息 - 我查看了 Microsoft.Azure.CosmosDB.BulkExecutor.BulkExecutor
的源代码,但没有看到任何提供额外内容的东西。
文档和目标的属性
- objective-c osmos 集合在开始前是空的。
- 我已经使用 SQL-API 创建了 Cosmos。
documents
有 1237278 个对象。- 每个文档都有
id
字段和用作分区键的字段的值。 - 总共有 4501 个分区。
- 文档在导入之前进行混洗,以通过同时写入尽可能多的不同分区来最大化吞吐量(如此处所述 - https://medium.com/@jayanta.mondal/azure-cosmos-db-bulk-import-tool-realizing-the-full-potential-722bb4f98476)。
谢谢。
最佳答案
无法重现您的问题。以下是一些个人建议:
您可以将文档分成更小的集合。然后运行多个任务,最后将结果组合在一起。
要验证是否所有文档都已导入,您可以通过
SELECT VALUE Count(1) from c
检查文档总数。然后你会得到真正的进口文件数量。基本上,如果数字正确,所有文件应该都可以。您还可以将云上的每个文档与本地进行比较。对于此类SDK问题,由于是部分成功且没有错误,所以很难确定根本原因。更好的方法是在 its 上提出问题Github 项目。项目贡献者可能会进一步帮助您。
关于c# - Azure Cosmos DB .NET 批量执行器响应显示导入的文档少于 Cosmos 中实际出现的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59106322/