Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 面向类电子邮件web应用的NoSQL数据库设计_Mongodb_Mongoose_Nosql - Fatal编程技术网

Mongodb 面向类电子邮件web应用的NoSQL数据库设计

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

受电子邮件服务(Gmail)的启发,我正在开发一个用于私人消息传递的web应用程序,在客户端使用AngularJS,在RESTful服务器上使用MongoDB(Mongoose)和NodeJS

目前,这是db结构

{
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协议?这应该是更复杂的应用程序的一小部分,并且私人消息不基于此在电子邮件地址上。