我正在尝试制作一个类似于 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/