这是我的问题。我正在尝试将一个较大的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 = []
任何建议将不胜感激。
答案 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>
当然,您可以通过编程方式执行此操作。您没有错过任何东西,错误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秒]。