Mongo 更新超级慢

Mongo Updates being super slow

我们的 mongo 更新遇到超时问题。我们的馆藏目前包含大约 30 万份文件。当我们尝试通过 UI 更新记录时,服务器超时并且 UI 陷入困境。

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。正在寻找有关如何显着加快速度的建议。

谢谢。

如果您的索引没问题,那么您可以尝试 rebuilding indexes 在此集合上。 从 mango 命令行收集索引: 例如,从 mongo 命令行重建潜在客户集合索引:

db.lead.reIndex();

参考:

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

如果你不用这个,试试这个 索引构建可以阻止对数据库的写入操作,因此您不希望在高峰使用期间在大表的前台构建索引。创建索引时指定background: true即可使用后台创建索引。

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

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

1) Shard Lead collection by id 作为分片键。 2)检查mongodb由于索引占用的内存是否小于mongoDb服务器的内存。

您是否尝试过 建议的方法?即,在不关注写入的情况下更新?