【发布时间】:2019-11-22 06:24:21
【问题描述】:
我开发了一个 azure webjob,用于在 MongoDb CosmosDb 数据库中插入大量数据。
以下是我的存储库中用于在 cosmosDb 数据库中插入数据的代码:
public async Task<bool> InsertZonierDataAsync(List<Zonier> zonierList)
{
if (zonierList == null || !zonierList.Any())
{
throw new ZonierListNullOrEmptyException();
}
try
{
await _retryPolicy.ExecuteAsync(async () =>
{
await _collection.InsertManyAsync(zonierList);
});
return true;
}
catch (MongoBulkWriteException ex)
{
throw new DataBaseWritingException(ex.Message, ExceptionCodeConstants.DataBaseWritingExceptionCode);
}
}
为了快速插入数据,我在作业运行期间将 RU/秒更新为 10K。
zonierList 中有大约 20 亿个原始数据需要插入。
不幸的是,通过网络作业插入数据需要很长时间(超过两个小时)。当我直接在 CosmosDb 中检查吞吐量时,它并没有在 10K 时被阻塞:
我做错了什么,为什么要花这么多时间?我可以通过配置更改某些内容还是应该更改插入数据的方式?
【问题讨论】:
-
什么是
_collection? -
你试过查看bulk executor .NET library吗?
-
批量执行器库目前仅适用于 SQL 和 Gremlin API。但是,如果这更像是一个迁移主题,请查看此处docs.microsoft.com/en-us/azure/cosmos-db/bulk-executor-overview
-
看起来 BulkImport 正在使用 MongoDb 数据库。链接:nuget.org/packages/Microsoft.Azure.CosmosDB.BulkExecutor
标签: c# azure-cosmosdb azure-cosmosdb-mongoapi