我正在 node.js 和 mongodb(mongoose 模块)上编写一个大型社交网络。这意味着数据库中会有很多用户和大量数据。
我已经创建了用户注册,现在我需要允许用户互相写私人消息。
问题:
1)我应该如何存储有关发送私人消息的数据?我想了两种方法:
第一的
var schemaUser = new mongoose.Schema({
i: Number,
...
message: { type: Schema.ObjectId, ref: 'Message' }
});
var schemaMessage = new mongoose.Schema({
m: [{
f: Number, // value i from schemaUser, means from user
m: String, // message
d: { type: Date, default: Date.now } // date
}]
});
module.exports = {
User: db.model('User', schemaUser),
Message: db.model('Message', schemaMessage)
}
这样,每个用户都有message
字段到Message
表,他只有一个集合m
,其中数组存储所有消息。
第二
我存储在这样的Messages
所有消息中:
var schemaMessage = new mongoose.Schema({
t: Number, // means to what user this messages sent
f: Number, // value i from schemaUser, means from what user message sent
m: String, // message
d: { type: Date, default: Date.now } // date
});
所有消息都混合在一个表中。但据我了解,这种方法的缺点是数据库中可能有超过一百万条私人消息,这就是为什么查找from
用户和to
用户发送的消息的速度和性能会很差。当使用第一种方法时,所有消息都在数组中。
那么,我应该选择哪种方式或任何其他想法?
2)我有第一种方法的数组:var arr = []
问题:我可以放入多少个对象arr
?大小是arr
多少?例如,如果我推动类似的东西arr.push({t: #, f: #, m: 'message...'})
?