javascript - (MongoDB)问答网站的数据库结构

标签 javascript node.js mongodb mongoose database

我正在尝试制作一个类似于 Yahoo & Answer 或 StackOverflow 的网站(不同类别,没有竞争),但我陷入了这一点,我非常感谢你们的任何指导,因为我非常感谢MongoDB 新手。

顺便说一下,我在 Node.js 和 MongoDB 上使用 Express 框架。

问题是找到最有效的方法来构建用户和问题/答案数据的数据库。

目前,有一个问题模型,里面有每个类别的文档。每个文档都包含问题本身、答案和其他信息,如下所述:

math{
    OpenQuestions{
        'x+2=5, whats x?' : {
            asker: 'peter',
            likes: 12,
            answers: {
                'x is 3' : {
                    answerer: 'john',
                    likes: 25
                },
                'x is 2' : {
                    answerer: 'MATHSUX',
                    likes: 0
                }   
            }
        }
    }
    ClosedQuestions{
        //same as OpenQuestions
    }
}

通过这种方式,显示问题非常容易,因为我们可以根据对象的创建时间轻松检索问题,并在主问题页面上相应地获取它们。

但是,如果用户想查看他提出的问题,我能想到的唯一方法就是遍历每个subject.OpenQuestions.QuestionItSelf.asker,并检查是否是用户本人,然后获取与该用户名匹配的所有对象,这将是一个巨大的计算。我确信存在更好的方法,你们觉得怎么样?

最佳答案

MongoDB 每个文档的大小限制为 16MB。此外,当文档大小不断增大时,MongoDB 的表现也不太好。出于性能原因,MongoDB 尝试将文档保留在硬盘上的连续部分,因此当文档增长时,需要不断重新分配硬盘空间。

出于这些原因,将所有问题存储在单个文档中并不是一个好主意。

最好创建一个问题集合,并为每个问题提供一个单独的文档。为了提高搜索性能,您可以创建一些适当的indices .

顺便说一句:我不确定 MongoDB 是否是适合您的项目的工具。您的应用程序听起来非常相关,并且不像它可以从 MongoDB 面向文档的概念中受益。另一方面,你的分层思维方式听起来更符合 Redis哲学。但这只是主观意见。

关于javascript - (MongoDB)问答网站的数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298693/

相关文章:

javascript - Electron preload.js 没有按照预期的方式运行

javascript - 如何在不破坏格式化程序的情况下为 flowtype 声明 react 组件的模块类型?

node.js - Mongodb Nodejs查询语法错误

javascript - 在 View @model 列表中使用 javascript 变量

java - servlet 如何确定上传何时被取消?

javascript - 使用nodejs/electron添加新行导致添加多行

c# - 公共(public)属性的默认 MongoDB 序列化

python - 如何使用 Python 从 MongoDB 的 GridFS 检索/读取图像?

node.js - 无法连接 Express 应用程序

node.js - npm solc : AssertionError [ERR_ASSERTION]: Invalid callback specified