我开发了一种天蓝色的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 / sec更新为10K。
zonierList
中大约有20亿原始用户需要插入。
不幸的是,通过网络作业插入数据要花费很多时间(超过两个小时)。而且,当我直接检查CosmosDb的吞吐量时,它不会在10K时被阻塞:
我做错了什么,为什么要花这么长时间?我可以通过配置更改某些内容还是应该更改插入数据的方式?
答案 0 :(得分:0)
即使您已为容器配置了1万个RU,Cosmos DB也会将该数量平均分配给组成该容器的所有物理分区。如果您要插入的所有文档都具有相同的分区键值,那么它们将全部进入相同的逻辑分区并返回物理分区。这意味着,如果您的集合具有4个物理分区,则您将仅使用所配置的10k中的2.5k。数字加起来。