2

这是我的问题。我正在尝试将一个大的 csv 文件上传到 cosmos db (~14gb),但我发现很难最大化我支付的吞吐量。在 azure 门户指标概述 UI 上,当我支付 16600 RU/s 时,它说我使用 73 RU/s。现在,我正在使用 pymongo 的批量写入功能上传到数据库,但我发现任何大于 5 的 bulk_write 长度都会引发硬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

4 回答 4

1

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

数据迁移工具当前不支持将 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的解决方法。请参考此文档将 cosmos db 设置为接收器。参考此文档将 Azure Blob 存储中的 csv 文件设置为源。在管道中,您可以配置批处理大小。

在此处输入图像描述

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

任何问题,请随时告诉我。

于 2018-08-27T06:35:20.247 回答
0

我会看一下Cosmos DB:数据迁移工具。我没有将它与 MongoDB API 一起使用,但它是受支持的。我已经使用它成功地将大量文档从我的本地计算机移动到 Azure,并且它将利用可用的 RU/s。

如果您需要以编程方式执行此操作,我建议您查看 DB Migration Tool 的底层源代码。这是开源的。你可以在这里找到代码。

于 2018-08-25T13:54:32.167 回答
0

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

于 2018-08-29T03:07:24.443 回答
0

我使用了 ComsodDB 迁移工具,无需进行太多配置即可将数据发送到 CosmosDB。根据我的假设,即使我们也可以发送 14Gb 的 CSV 文件。

以下是我们传输的数据

[10000 条记录转移 | 吞吐量 4000 | 500 并行请求 | 25 秒]。[10000 条记录转移 | 吞吐量 4000 | 100 并行请求 | 90 秒]。[10000 条记录转移 | 吞吐量 350 | 并行请求 10 | 300 秒]。

于 2020-10-05T11:15:39.583 回答