当从DB A到DB B同步大量数据时,性能非常慢。我试图同步下面的记录,但是看到大约60000条记录大约需要35分钟。
我需要执行findOneAndUpdate(如果尚不存在,则使用upsert创建),然后返回该对象以进行一些处理(对于本示例,我尚未进行处理,只是运行代码会导致性能降低)下面)。
for (const syncExample of syncExampleRecords) {
const savedObject = await example.findOneAndUpdate(
{ 'original.id': syncExample.id },
newObject,
{ new: true, upsert: true }
)
.lean()
.catch(err => {
rej(err);
});
}
我的模式是:
syncExampleSchema: new this.Schema(
{
original: {
id: { type: String },
created_at: {
date: { type: Date },
timezone_type: { type: String },
timezone: { type: String },
},
updated_at: {
date: { type: Date },
timezone_type: { type: String },
timezone: { type: String },
},
},
parent: {
type: this.Schema.Types.ObjectId,
ref: 'parent_table',
},
source_id: { type: String },
fk_1: {
type: this.Schema.Types.ObjectId,
ref: 'fk_table_1',
},
fk_2: {
type: this.Schema.Types.ObjectId,
ref: 'fk_table_2',
},
fk_3: {
type: this.Schema.Types.ObjectId,
ref: 'fk_table_3',
},
external_id: { type: String },
fk_4: {
type: this.Schema.Types.ObjectId,
ref: 'fk_table_4',
},
start_at: {
date: { type: Date },
timezone_type: { type: String },
timezone: { type: String },
},
end_at: {
date: { type: Date },
timezone_type: { type: String },
timezone: { type: String },
},
},
{ timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
)