我正在组建一个简单的论坛,作为一种将我的脚趾浸入文档dbs的方法 - 认为建模是相对简单的事情。
我无法弄清楚文件应该如何存储。目前使用RavenDB,但我想它将与其他doc类似。 DBS。
基本上,有Forums
,每个论坛都有一堆Threads
,每个帖子都包含一堆由Posts
创作的Users
。
在我的脑海中,我把它绘制成每个都是不同的文档,主要是因为每个Forum
可能有数千个Threads
,每个Thread
可能有数千{ {1}}。拥有非独特文件似乎会导致它们随着时间的推移而变得庞大?
查看列出所有Posts
的网页时,我想显示Posts
名称(没什么大不了的)和Author
帖子数。这就是我被困住的地方。
我可以将Author
名称存储在帖子中,因为它不太可能更改,但Author
帖子计数会不断变化,因此无法存储在Author
中。
所以现在如果我显示一个包含50个帖子的页面,我需要执行连接的关系等效来获取当前Post
帖子计数。这告诉我,我做错了,除非文档数据库不适合这种情况吗?
看起来RavenDB中的Live Projections应该可以解决这个问题,但我仍然希望对可能的替代数据库设计提出一些意见。
答案 0 :(得分:1)
我在想一个非常相似的情况。我得出了和你一样的结论。但是,我忘记了某些事情,也许你也忘记了同样的事情:文档DB具有非常非规范化的性质。因此,您可以在ravenDB中使用实时投影,但对于特殊情况,因为正常情况是复制数据。例如:
发表:
ThreadId(需要过滤)
文本
AUTHORID
<强> AuthorUsername 强>
<强> AuthorLastLogin 强>
<强> AuthorAnything 强>
通过这种方式,如果您以后需要,您可以获得作者的ID,但是您使用的数据最常用,并且没有连接或实时投影。
在作者帖子计数的情况下,您必须使用map / reduce索引。这些指数不断重生。因此,当作者发帖时,他的计数不会立即更新,但它会最终一致。这是Document DB的一个重要部分。
希望这可以提供帮助