Mongodb 面向类电子邮件web应用的NoSQL数据库设计
受电子邮件服务(Gmail)的启发,我正在开发一个用于私人消息传递的web应用程序,在客户端使用AngularJS,在RESTful服务器上使用MongoDB(Mongoose)和NodeJS 目前,这是db结构Mongodb 面向类电子邮件web应用的NoSQL数据库设计,mongodb,mongoose,nosql,Mongodb,Mongoose,Nosql,受电子邮件服务(Gmail)的启发,我正在开发一个用于私人消息传递的web应用程序,在客户端使用AngularJS,在RESTful服务器上使用MongoDB(Mongoose)和NodeJS 目前,这是db结构 { conversation: { user1: { type: mongoose.Schema.ObjectId, ref: 'User' }, user2: { type: mongoose.Schema.Ob
{
conversation: {
user1: {
type: mongoose.Schema.ObjectId,
ref: 'User'
},
user2: {
type: mongoose.Schema.ObjectId,
ref: 'User'
},
user1Flags: [String],
user2Flags: [String],
messages: [{
title: String,
content: String,
sender: {
type: mongoose.Schema.ObjectId,
ref: 'User',
},
sentAt: Date,
createdAt: Date,
attachments: [String],
senderMetaData: {
archived: Boolean,
deleted: Boolean
},
recipientMetaData: {
archived: Boolean,
deleted: Boolean
}
}]
}
}
嗯,我对此很满意,但我对NoSql没有太多经验
我想听听您对此的看法,这是正确的方法吗?您的设计中一个明显的性能考虑因素是,您可能将存储在单个对话文档中。随着非常活跃的对话变得越来越大,这些文档将需要更频繁地在磁盘上重新定位,最终可能会达到最大容量(16MB,如MongoDB 2.6)。如果您只关心阵列中最近的消息,那么将整个文档加载到MongoDB服务器上的内存中的开销也会越来越大,即使您仅通过驱动程序调用投影最近信息的子集
对于如何设计有效的消息传递方法的一些想法,我建议阅读该项目的文档。对于你的用例来说,这绝对是多余的,但是你可能会发现一些有用的事情要考虑。例如介绍了几种不同的方法,包括缺点和建议,说明每种方法何时更合适。是否有理由不利用自计算机网络出现以来已标准化的POP3/IMAP/SMTP协议?这应该是更复杂的应用程序的一小部分,并且私人消息不基于此在电子邮件地址上。