Mongo更新非常慢

时间:2019-02-25 19:49:29

标签: node.js mongodb heroku mongoose mlab

我们的mongo更新面临超时问题。我们的馆藏目前包含约30万份文档。当我们尝试通过用户界面更新记录时,服务器超时,用户界面陷入困境。

Lead.updateOne({
      _id: body.CandidateID
    }, {
      $set: {
        ingestionStatus: 'SUBMITTED',
        program: body.program,
        participant: body.participant,
        promotion: body.promotion,
        addressMeta: body.addressMeta,
        CreatedByID: body.CreatedByID,
        entryPerson: body.entryPerson,
        lastEnteredOn: body.lastEnteredOn,
        zipcode: body.zipcode,
        state: body.state,
        readableAddress: body.readableAddress,
        promotionId: body.promotionId,
        programId: body.programId,
        phone1: body.phone1,
        personId: body.personId,
        lastName: body.lastName,
        hasSignature: body.hasSignature,
        firstName: body.firstName,
        city: body.city,
        email: body.email,
        addressVerified: body.addressVerified,
        address: body.address,
        accountId: body.accountId
      }

这是我们更新单个记录的方式。我们在堆栈中使用了mlab和Heroku。寻找有关如何大大加快速度的建议。

谢谢。

4 个答案:

答案 0 :(得分:2)

如果索引很好,那么您可以尝试rebuilding indexes对此集合进行操作。 从mango命令行收集索引: 例如,从mongo命令行重建线索收集索引:

db.lead.reIndex();

参考:

https://docs.mongodb.com/v3.2/tutorial/manage-indexes/ https://docs.mongodb.com/manual/reference/command/repairDatabase/

答案 1 :(得分:1)

如果您不使用此功能,请尝试使用此功能 索引构建可能会阻止对数据库的写操作,因此您不想在高峰使用期间在大型表的前台构建索引。您可以通过指定background:true来使用索引的后台创建。

db.collection.createIndex({a:1},{background:true})

这最终将花费更长的时间来完成,但不会阻止操作,并且对性能的影响较小。

答案 2 :(得分:1)

1)通过ID作为分片键的分片线索集合。 2)检查mongodb由于索引占用的内存是否小于mongoDb服务器的内存。

答案 3 :(得分:1)

您是否尝试过this answer的建议?也就是说,更新时没有写顾虑吗?