2

我正在组建一个简单的论坛,作为一种将我的脚趾浸入文档数据库的方式 - 认为建模是相对简单的事情。

我很难弄清楚应该如何存储文档。目前使用 RavenDB,但我想其他文档也会类似。数据库。

所以基本上,Forums每个论坛都有一堆,Threads每个线程都包含一堆PostsUsers.

在我的脑海中,我将其绘制成让每个文件都是不同的文件,主要是因为每个文件都Forum可能有数千个Threads,每个Thread可能有数千个Posts. 拥有不明显的文件似乎会导致它们随着时间的推移变得庞大?

查看列出所有Posts我想要显示的Author名称(没什么大不了的)和Author帖子数的页面时。这是我卡住的地方。

我可以将Author名称存储在帖子中,因为它不太可能更改,但是Author帖子数量会不断变化,因此无法将其存储在Post.

所以现在如果我要显示一个包含 50 个帖子的页面,我需要执行与 join 等效的关系来获取当前Author的帖子数。这向我表明我做错了,除非文档数据库不适合这种情况?

编辑

看起来RavenDB 中的Live Projections应该可以很好地处理这个问题,但我仍然想就可能的替代数据库设计发表一些评论。

4

1 回答 1

1

我正在考虑一个非常相似的情况。我得出了和你一样的结论。但是,我忘记了一些事情,也许您也忘记了同样的事情:文档数据库具有非常非规范化的性质。因此,您可以在 ravenDB 中使用实时投影,但对于特殊情况,因为正常的做法是复制数据。例如:

邮政:

  • ThreadId(过滤所需)

  • 文本

  • 作者 ID

  • 作者用户名

  • 作者上次登录

  • 作者任何东西

这样,如果您以后需要它,您就有作者的 id,但您有最常用的数据非规范化并且无需连接或实时投影即可使用。

在作者帖子计数的情况下,您必须使用 map/reduce 索引。这些指数在不断地再生。因此,当作者发帖时,他的计数不会立即更新,但最终会保持一致。这是 Document DB 的重要组成部分。

希望这可以帮助

于 2011-01-12T23:44:31.057 回答