node.js - 如何使用 1M 记录优化 mongodb 中的 upsert 批量查询
问题描述
我有一个不断下载数据的脚本,我将这些数据保存到 MongoDB 中。每个文档都有一个 Id。如果我收到相同的文件,我只更新一部分。如果 id 是新的,我会添加整个文档。
现在的问题是,当 MongoDB 中没有文档时,它运行顺利,但是当我在 mongo 中有大约 30k 文档时,性能开始下降。
var batch = database_object.collection(channel_basic_data_collection).initializeUnorderedBulkOp({useLegacyOps: true});
batch.find(query).upsert().updateOne(update_OPERTATION);
if (count > 1000 )
{
batch.execute(function (err, result) {
if (err){
errorLog(err)
operation_started = false
return
}
batch = database_object.collection(channel_basic_data_collection).initializeUnorderedBulkOp({useLegacyOps: true});
});
}
我需要插入 150 万个文档,并且对于每个新文档,我都需要搜索整个集合。
解决方案
在您用于查询的字段中创建索引。
推荐阅读
- anylogic - seizeTransporter Block out port stop working
- python - How to overcome the aspect ratio warnings when plotting images in log-scaled axis with Python?
- javascript - Parsing through a column of a csv file and save it to arrays in javascript to run a matching between rows of the selected column
- elasticsearch - Elasticsearch 7 x_content_parse_exception failed to parse field [must]
- python-3.x - How can we get disk usage details(total,free,used) from ec2 instance using boto3?
- json - 按特定属性对复杂 JSON 对象进行排序
- c# - 如何让我的方法返回一个字符串值但仍然是一个异步方法?
- string - 检查文件的行是否包含给定的模式,而 Rust 中没有正则表达式
- python - SWIG 返回字节而不是带有类型映射的字符串
- xamarin.forms - Xamarin.iOS - 处理自定义渲染器方法时出错