CosmosDb-插入大量数据

时间:2019-07-12 13:13:32

标签: c# azure-cosmosdb azure-cosmosdb-mongoapi

我开发了一种天蓝色的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时被阻塞:

enter image description here

我做错了什么,为什么要花这么长时间?我可以通过配置更改某些内容还是应该更改插入数据的方式?

1 个答案:

答案 0 :(得分:0)

即使您已为容器配置了1万个RU,Cosmos DB也会将该数量平均分配给组成该容器的所有物理分区。如果您要插入的所有文档都具有相同的分区键值,那么它们将全部进入相同的逻辑分区并返回物理分区。这意味着,如果您的集合具有4个物理分区,则您将仅使用所配置的10k中的2.5k。数字加起来。