CosmosDb - 插入大量数据

CosmosDb - Insert a lot of data

我开发了一个用于在 MongoDb CosmosDb 数据库中插入大量数据的 azure webjob。

下面是我存储库中用于在 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 亿原始数据需要插入。

不幸的是,通过 webjob 插入数据需要花费很多时间(两个多小时)。当我直接在 CosmosDb 中检查吞吐量时,它不会在 10K 处被阻塞:

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

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