簡體   English   中英

MongoDB數據建模性能

[英]MongoDB data modelling performance

我目前正試圖在mongodb上找出在性能成本和冗余方面最好的方法,這是構建大文檔數據模式的最好方法。 我其余的->應用中的最終JSON可能是如何構造的。 現在內部不會使用太多數據,這就是為什么我將其綁定到單個文檔中的原因。 只有id會在其他集合中用作參考。 你們認為,最好以關系方式吐痰,通過多個集合將內容存儲在可交付成果內部並使用引用或僅嵌入。 (因為NoSQL沒有連接我,盡管這樣可以加快速度)

當前在節點應用程序 The Schema中使用貓鼬

projectSchema = new Schema({
name: {
    type: String,
    required: true,
    minlength: 3,
    maxlength: 50
},
companyId: {
    type: mongoose.Types.ObjectId,
    ref: 'companies',
    required: true
},
deleted: {
    type: Number,
    enum: [0, 1],
    default: 0
},
predictedStartDate: {
    type: Date,
    default: ""
},
predictedEndDate: {
    type: Date,
    default: ""
},
realStartDate: {
    type: Date,
    default: ""
},
realEndDate: {
    type: Date,
    default: ""
},
//not final version
riskRegister: [{
    name: String,
    wpId: {
        type: mongoose.Types.ObjectId,
        ref: 'projects.deliverables.workPackages.id',
        required: true
    },
    probability: String,
    impact: String,
    riskOwner: String,
    response: String,
    duration: String,
    trigger: String,
    status: String,
    plannedTimming: String
}],
deliverables: [{
    body: String,
    workPackages: [{
        body: String,
        activities: [{
            body: String,
            tasks: [{
               content: String,
               properties: [{
                   dependecies: Array,
                   risk: {
                       type: Number,
                       enum: [0,1],
                       required: true
                   },
                   estimatedTime: {
                       type: Number,
                       required: true
                   },
                   realTime: {
                      required: true,
                      default: 0,
                      type: Number 
                   },
                   responsible: {
                       id: {
                           type: Number,
                           default: -1
                       },
                       type: {
                           type: String,
                           enum: [0, 1], //0 - user, 1 - team
                           default: -1
                       }
                   },
                   materialCosts: {
                       type: Number,
                       default: 0
                   },
                   status: {
                       type: Number,
                       default: 0
                   },
                   approval: {
                       type: Number,
                       default: 0
                   },
                   startDate: {
                       type: Date,
                       default: ""
                   },
                   finishDate: {
                       type: Date,
                       default: ""
                   },
                   endDate: {
                       type: Date,
                       default: ""
                   },
                   userStartDate: {
                        type: Date,
                        default: ""
                   },
                   endStartDate: {
                        type: Date,
                        default: ""
                   },
                   taskNum: {
                       type: Number,
                       required: true
                   },
                   lessonsLearn: {
                    insertedAt: {
                        type: Date,
                        default: Date.now
                    },
                    creatorId: {
                        type: mongoose.Types.ObjectId,
                        ref: 'users',
                        required: true
                    },
                    situation: {
                        type: String,
                        required: true
                    },
                    solution: {
                        type: String,
                        required: true
                    },
                    attachments: Array
                   }
               }] 
            }]
        }]
    }]
}]

})

我要提出的唯一問題就是可交付成果。 如果將來有一個用例對workPackage上的活動或任務執行某些CRUD操作,則mongodb位置運算符$不支持內部數組 ,因此您將不得不提取所有可交付結果,並在內存中迭代所有和僅在更新可交付成果之后。 我的建議是僅支持對象第一級的數組。 內部對象應在單獨的集合(活動和任務)中進行模塊化。 在最新版本的mongodb中,您現在支持事務,因此您可以在針對數據庫的操作上實現ACID,因此可以以原子方式對所有這些信息進行操作。

暫無
暫無

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

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