【发布时间】:2012-10-17 18:57:58
【问题描述】:
好的,所以我即将开始使用 Node.js 为我的网站写博客(就像一个学习过程一样),我一直在激烈地与自己争论使用 MySQL 或 MongoDB 中的哪一个.
四处搜索产生了一些“如何在 Mongo 中写博客”指南,但它们似乎并未涵盖我遇到的问题。这是我的困境:
如果我要使用 MySQL,我会想象我的架构是这样的:
帖子:
ID, USER, DATE, TITLE, TAGS
评论:
POST_ID, USER, DATE, MESSAGE
用户:
ID, SCREEN_NAME, IMAGE_URL
所以,每个帖子都有关联的 cmets,帖子和 cmets 都有关联的用户。优点是如果用户希望更改他们的屏幕名称或图像,只需更新用户表中的一行。但是,我不确定如何获取所有包含 X 标签的帖子,除非我有多个字段用于多个潜在标签?
或者,使用 MongoDB 之类的东西,我正在研究这样的格式:
帖子集合:
{
{
_ID: something
USER: {id: id, name: "screen name", image: "image_url"}
DATE: ...
TITLE: ...
TAGS: [tag1, tag2...]
COMMENTS:
[
{USER:someone, DATE:something, MESSAGE:"hi"},
{USER:someone, DATE:something, MESSAGE:"another message"}
]
},
{
_ID: something,
USER: {id: id, name: "screen name", image: "image_url"},
DATE: ...
TITLE: ...
TAGS: [tag1, tag2...]
COMMENTS:
[
...
]
},
}
因此,cmets 嵌入在每个帖子中,这看起来很自然。
在这里,一个查询可以检索我所有匹配的帖子,这很棒。另一方面,如果我需要更新用户使用的屏幕名称或图像怎么办?挖掘给定文档中的嵌入对象似乎很困难,更不用说更新每个帖子中的所有相关记录了。
我可以将 cmets 移动到一个单独的集合中以使其更易于访问,但我仍然面临着对屏幕名称等内容进行大量更新。
所以...
本质上,我更喜欢使用 MongoDB,因为它可以做的事情,它可以很容易地做,并且全面使用一种语言是很好的。但是,我不禁觉得我需要采用关系方法才能“正确”完成工作。
有没有人用任何一种语言或两种语言都做过类似的事情?
您对此有何看法,特别是您如何处理用户与 cmets/posts 之间的关系?
提前感谢您的帮助:) 詹姆斯
【问题讨论】:
-
使用 Disqus 进行 cmets,使用 Jekyll 进行部署 - 10 分钟,您就完成了一个完全可维护的设置。