【发布时间】:2013-07-04 23:47:42
【问题描述】:
我正在 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 用户的速度和性能会很差。
当使用 first 方法时,所有消息都在数组中。
那么,我应该选择哪种方式或任何其他想法?
2) 我有第一种方法的数组:var arr = []
问题:我可以在arr 中放入多少个对象? arr 的大小是多少?例如,如果我推送类似arr.push({t: #, f: #, m: 'message...'})?
【问题讨论】:
-
为什么选择 MongoDB?
-
我阅读了很多关于数据库的信息并决定,MongoDB 最适合我的目标(node.js+socket.io+express)。我应该用什么代替你的意见? :)
-
我不确定 MongoDB 是否适合“社交”网络类型的消息传递系统。低容量,它可以工作,但对于高容量,没有连接的事实可能会使数据整理从性能角度来看具有挑战性,没有大量缓存等。在任何代码之前需要完成大量设计是写的。 :)
-
你会推荐什么数据库而不是 MongoDB? MySQL?无论如何,我在 MongoDB 上写了很多,并读到 MongoDB 疯了,每个人都应该使用它)
-
你可以使用你想要的,我不想推荐一个没有更多细节的特定平台(而且 StackOverflow 不是这类讨论的好地方)。
标签: node.js mongodb mongoose database nosql