如何使用Azure Cosmos db最大化数据库上传速率

时间:2018-08-25 09:54:34

标签: python-2.7 azure azure-cosmosdb pymongo-3.x azure-cosmosdb-mongoapi

这是我的问题。我正在尝试将一个较大的csv文件上传到cosmos db(〜14gb),但是我发现很难最大程度地提高我要支付的吞吐量。在azure门户指标概述UI上,它说我以16600 RU / s的价格使用73 RU / s。现在,我正在使用pymongo的批量写入功能上载到数据库,但是我发现,任何bulk_write长度大于5都会引发硬Request rate is large.异常。我做错了吗?在这种情况下,有没有更有效的方式上传数据? Internet带宽可能不是问题,因为我正在从azure vm上传到cosmos db。

我现在如何在python中上传的结构:

for row in csv.reader:
    row[id_index_1] = convert_id_to_useful_id(row[id_index_1])

    find_criteria = {
        # find query
    }

    upsert_dict = {
        # row data
    }
    operations.append(pymongo.UpdateOne(find_criteria, upsert_dict, upsert=True))

    if len(operations) > 5:

        results = collection.bulk_write(operations)

        operations = []

任何建议将不胜感激。

4 个答案:

答案 0 :(得分:1)

亚伦。是的,正如您在评论中所说,Azure Cosmos DB MongoDB API支持迁移工具。您可以在official doc中找到打击声明。

  

数据迁移工具当前不支持Azure Cosmos DB   MongoDB API作为源或目标。如果要迁移   Azure Cosmos DB中从MongoDB API集合传入或传出的数据,   请参阅Azure Cosmos DB:如何为MongoDB API迁移数据   说明。您仍然可以使用数据迁移工具导出数据   从MongoDB到Azure Cosmos DB SQL API集合,以与   SQL API。

我只是为您提供一种可以使用Azure Data Factory的解决方法。请参考此doc以将cosmos数据库设置为接收器。并参考此doc以将Azure Blob存储中的csv文件作为源。在管道中,您可以配置批处理大小。 / p>

enter image description here

当然,您可以通过编程方式执行此操作。您没有错过任何东西,错误Request rate is large仅表示您已超出预配置的RU配额。您可以提高RUs设置的值。请参阅此doc

任何担心,请随时让我知道。

答案 1 :(得分:0)

我来看看Cosmos DB: Data Migration Tool。我还没有在MongoDB API中使用它,但是它受支持。我已经使用它成功地将许多文档从本地计算机迁移到Azure,它将利用可用的RU。

如果您需要以编程方式执行此操作,建议您查看一下DB Migration Tool的基础源代码。这是开源的。您可以找到代码here

答案 2 :(得分:0)

我能够提高上传速度。我注意到每个物理分区都有一个吞吐量限制(由于某种原因,物理分区的数量乘以每个分区的吞吐量仍然不是集合的总吞吐量),所以我所做的是按每个分区拆分数据,然后创建每个分区键都有一个单独的上载过程。这使我的上传速度提高了(物理分区数量)倍。

答案 3 :(得分:0)

我使用了ComsodDB迁移工具,该工具非常棒,无需进行大量配置即可将数据发送到CosmosDB。即使按照我的假设,我们也可以发送14Gb的CSV文件。

下面是我们传输的数据

[10000条记录已转移|产量4000 | 500个并行请求| 25秒]。 [10000条记录转移|产量4000 | 100个并购请求| 90秒]。 [10000条记录转移|产量350 |要求10 | 300秒]。