如何在适用于MongoDB API的Cosmos DB中执行批量数据上传
100GB JSON文件导入Cosmos DB(MongoDB API)解决方案
关于直接上传JSON的功能说明
Cosmos DB本身没有内置单步直接上传整份JSON文件的功能,所有批量数据导入都需要通过兼容MongoDB生态的工具、官方迁移工具或者自定义代码实现。
批量上传实现方案
你可以根据自己的技术栈和预处理需求选择以下方案:
- 官方数据迁移工具导入
适配MongoDB API的Cosmos DB官方迁移工具支持本地JSON文件批量导入,你只需要提前配置Cosmos DB的MongoDB连接字符串,根据你预配的RU(请求单元)容量调整批量写入批次大小、并发数即可。针对100GB的超大JSON文件,建议提前拆分为100MB~1GB的小分片文件,避免单文件处理时内存溢出。 - MongoDB原生
mongoimport工具导入
Cosmos DB MongoDB API完全兼容MongoDB原生协议,你可以直接用mongoimport命令行工具完成导入,参考命令如下:
如果你的JSON是单个数组合集格式,需要追加mongoimport --uri "cosmos-db-mongodb-连接字符串" --collection 目标集合名 --file 本地JSON文件路径 --batchSize 1000 --numInsertionWorkers 8--jsonArray参数;如果是每行存储一个独立JSON文档的行存格式,无需额外参数。导入前建议临时调高集合的RU吞吐量,导入完成后再调回日常值降低成本。 - 自定义代码批量写入
如果你需要在导入前做字段校验、分片键赋值、数据清洗等预处理操作,可以使用任意语言的MongoDB驱动实现流式写入:逐批读取JSON文件中的文档,每批积累1000~5000条后调用insert_many接口批量提交,同时添加429限流错误的重试逻辑,捕获到限流响应后按返回的重试等待时间延迟后再提交下一批。100GB大文件一定要用流式读取,不要一次性加载全量文件到内存。
导入优化建议
- 导入前提前设置好集合的分片键,创建必要的查询索引,避免导入完成后再建索引消耗大量时间
- 导入期间关闭集合的非必要索引、诊断日志功能,降低写入额外开销
- 尽量在和Cosmos DB账户同区域的设备上运行导入任务,减少网络传输延迟
内容的提问来源于stack exchange,提问作者Kiranmai
相关产品推荐
相关产品推荐

