python - 100k 条记录的 PyMongo Bulk Upsert 性能
问题描述
我每天使用 PyMongo 批量更新插入约 100k 文档。大多数文档将被更新,并且将创建约 100 个文档。我正在使用下面的代码来执行批量写入操作,但目前 200 个文档需要约 36 秒,对于 100k 文档,这将转换为约 5 小时,我想知道如何优化它?
from pymongo import MongoClient, UpdateOne
# Connect to Mongo
client = MongoClient(mongo_key)
db = client.db_name
def send_mongo(data, my_list):
operations = []
# Loop through new data to prepare it for mongo
for p, li in zip(data, my_list):
# core data
custom_id = li.get_text()
core_data = p['info']
rela_data = p['rels']
operations.append(
UpdateOne(
{
"cust_id": custom_id
},
{
"$set": {
"cust_id": custom_id,
"core": core_data,
"releases": rels_data,
}
},
upsert=True
)
)
# Send once every 1000 in batch
if ( len(operations) == 1000 ):
db.Collection.bulk_write(operations,ordered=False)
operations = []
解决方案
推荐阅读
- shell - Shell 脚本:如何使用 cURL 或 wGet 从列表中调用 URL?我只能让最后一行工作!帮助!:)
- c# - 如何在 C# EF Core 中使用 join 子句中的条件编写 SQL 命令
- c - printf 语句末尾的空格被延迟打印或在 C 中用 Clion 修剪
- python - dask 分布式 - 使用从延迟函数返回的列表的正确方法
- javascript - 无法在反应中获得对象数组的预期映射结果
- c++ - Make在Boost中找不到.hpp文件
- r - 如何合并重复项
- java - 为什么 Eureka registry evict-task 运行如此缓慢?
- c# - 具有 jwt 令牌和 Azure AD 身份验证的 Blazor WASM 应用
- java - 在 Retrofit 中使用 Get 方法时获取 gson 时出错