【发布时间】:2022-10-18 04:28:58
【问题描述】:
我正在寻找方法来提高我的 mongoDB 应用程序的 upsert 性能。在我的测试程序中,我有一个“用户”集合,它有一个“id”(类型 - 数字)和一个“名称”(类型 - 字符串)属性。 'id' 上有一个唯一索引。
问题: 执行批量写入时(有序:false) - 启用 upsert 的 updateOne 或 replaceOne 似乎比“insertOne”慢 6 到 8 倍。
我的索引:
await getDb().collection('user').createIndex({
id: 1
}, {
unique: true,
name: "id_index"
});
100,000 个用户的示例 replaceOne(耗时 8.8 秒):
operations.push({
replaceOne: {
filter: {id: 1},
replacement: {id: 1, name: "user 1"},
upsert: true
}
})
示例 updateOne(耗时 8.4 秒)100,000 个用户:
operations.push({
updateOne: {
filter: {id: 1},
update: {$set:{name: "user 1"}},
upsert: true
}
})
示例 insertOne(耗时 1.3 秒)100,000 个用户:
operations.push({
insertOne: {id: 1, name: "user 1"}
})
注意 - 每次我执行这些测试时,都会清空集合,并重新创建索引。
这是可以预期的吗?
我还能做些什么来提高 upsert 性能吗?我在 bulkWrite 上修改了 writeConcern,几乎没有影响。
【问题讨论】:
标签: javascript mongodb