簡體   English   中英

MongoDB findOneAndUpdate 寫入沖突顯着影響性能

[英]MongoDB findOneAndUpdate write conflicts significantly affect performance

我遇到 MongoDB 的性能問題。

我們的數據庫在imagehashtag之間有松散的聯系。 當服務器保存新圖像時,它會更新hashtag中的imageCount值。 問題是同一主題標簽上可能同時有數百個更新。 由於寫入沖突,保存速度非常慢。

我是否誤解了應該如何建立這種聯系? 是否有可能使這項工作更快?

謝謝!

當前方法更新主題標簽查詢:

const dbHashtag = await Hastag.findOneAndUpdate(
  { name: hashtag.name },
  { $inc: { videoCount: 1 } },
  { upsert: true, new: true }
).select('_id').lean()

圖像架構:

const imageSchema = new mongoose.Schema({
  hashtags: [{ type: Schema.Types.ObjectId, ref: 'Hashtags' }]
})

標簽架構:

const hashtagSchema = new mongoose.Schema({
  name: {
    type: 'String',
    unique: true
  },
  imageCount: {
    type: 'Number'
  },
})

hashtagSchema.index({ name: 1 })

這是我的錯誤。 早些時候,我在圖像和主題標簽之間建立了多對多關系。

const hashtagSchema = new mongoose.Schema({
  name: {
    type: 'String',
    unique: true
  },
  imageCount: {
    type: 'Number'
  },
  images: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Image"
    }
  ]
})

我從標簽中刪除了圖像列表,因為它可能超過 100000 個 ID。 問題是我剛剛從 model 中刪除了行,但數據仍在數據庫中。 從數據庫中刪除視頻列表可以解決問題。

await Hastag.updateMany({}, { $unset: { images: 1 } })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM