【发布时间】:2011-09-27 14:25:45
【问题描述】:
我需要在 mongoDB 中为类似 stackoverflow 的问答网站建模,这是我的主要问题。
我有 2 个主要对象 - 问题和用户(忘记答案等其他对象......)。
用户提问。我需要始终向用户显示问题。可以搜索问题并浏览所有问题。更安全地说,用户会提出少于 1000 个问题。
用户的声誉会经常更新,当前的声誉应始终与问题一起显示。
解决方案 1:将用户嵌入问题中 -
无需执行加入,但当用户声誉发生变化时,应更新所有相关问题。并且不容易显示单个用户
解决方案 2:将用户和问题建模为单独的集合(就像在 RDBMS 中一样) -
现在更新信誉不是问题,但每次检索到问题时都需要在用户和问题之间进行连接。就像在 RDBMS 中一样。此外,mongoDB 没有连接,连接实际上是 2 次调用 - 1 次获取问题,另外 1 次获取用户,因此如果要检索 100 个问题,将有 100 次调用来获取 100 个单独的用户 - 不好.
解决方案 3:将用户嵌入问题中,并为用户提供单独的集合
更新时,更新用户集合和内嵌用户,只显示用户时——使用用户
那么我应该使用哪一个?或者这最好用像 MySQL 这样的 RDBMS 来解决? mongoDB 中的字段更新速度有多快?
我喜欢使用 mongo,因为它的速度和轻松将读取请求路由到副本和分片(如果我的网站是从单个服务器发展而来的,这无论如何都不太可能;()
【问题讨论】:
标签: database-design mongodb data-modeling