论坛文档数据库设计

时间:2010-12-08 11:08:42

标签: .net database database-design ravendb

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

我无法弄清楚文件应该如何存储。目前使用RavenDB,但我想它将与其他doc类似。 DBS。

基本上,有Forums,每个论坛都有一堆Threads,每个帖子都包含一堆由Posts创作的Users

在我的脑海中,我把它绘制成每个都是不同的文档,主要是因为每个Forum可能有数千个Threads,每个Thread可能有数千{ {1}}。拥有非独特文件似乎会导致它们随着时间的推移而变得庞大?

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

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

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

修改

看起来RavenDB中的Live Projections应该可以解决这个问题,但我仍然希望对可能的替代数据库设计提出一些意见。

1 个答案:

答案 0 :(得分:1)

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

发表:

  • ThreadId(需要过滤)

  • 文本

  • AUTHORID

  • <强> AuthorUsername

  • <强> AuthorLastLogin

  • <强> AuthorAnything

通过这种方式,如果您以后需要,您可以获得作者的ID,但是您使用的数据最常用,并且没有连接或实时投影。

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

希望这可以提供帮助