.net 论坛文档数据库设计
我正在组织一个简单的论坛,作为深入研究dbs文档的一种方式——我认为这将是一个相对直接的建模方式 我搞不清楚这些文件应该如何存储。目前正在使用RavenDB,但我想其他doc也会如此。星展银行 所以基本上,有.net 论坛文档数据库设计,.net,database,database-design,ravendb,.net,Database,Database Design,Ravendb,我正在组织一个简单的论坛,作为深入研究dbs文档的一种方式——我认为这将是一个相对直接的建模方式 我搞不清楚这些文件应该如何存储。目前正在使用RavenDB,但我想其他doc也会如此。星展银行 所以基本上,有论坛,每个论坛都有一堆线程,每个线程都包含一堆帖子,这些帖子都是用户编写的 在我的脑海中,我把它描绘成每一个都是不同的文档,主要是因为每个论坛可能有数千个线程,每个线程可能有数千个帖子。拥有不明显的文档似乎会导致它们随着时间的推移变得庞大 查看列出所有帖子的页面时我想显示作者姓名(没什么大不
论坛
,每个论坛都有一堆线程
,每个线程都包含一堆帖子
,这些帖子都是用户编写的
在我的脑海中,我把它描绘成每一个都是不同的文档,主要是因为每个论坛
可能有数千个线程
,每个线程
可能有数千个帖子
。拥有不明显的文档似乎会导致它们随着时间的推移变得庞大
查看列出所有帖子的页面时
我想显示作者
姓名(没什么大不了的)和作者
帖子数量。这就是我被困的地方
我可以将作者
姓名存储在帖子中,因为它不太可能更改,但是作者
帖子数量将不断更改,因此这不能存储在帖子
中
因此,现在如果我显示一个包含50篇文章的页面,我需要执行一个连接的关系等价物,以获得当前作者文章计数。这向我表明我做错了,除非文档数据库不适合这种情况
编辑
看起来在RavenDB中应该可以很好地处理这个问题,但我仍然想对可能的替代DB设计发表一些意见。我正在考虑一个非常类似的情况。我得出了和你一样的结论。但是,我忘记了一些东西,也许你也忘记了同样的东西:文档数据库具有非常非规范化的性质。因此,您可以在ravenDB中使用实时投影,但对于特殊情况,因为通常要做的是复制数据。例如:
职位:
- ThreadId(筛选所需)
- 正文
- 作者
- AuthorUsername
- AuthorLastLogin
- AuthorAnything
通过这种方式,如果您以后需要,您可以获得作者id,但是您可以将最常用的数据非规范化,并且在没有联接或活动投影的情况下可用
在作者文章计数的情况下,必须使用map/reduce索引。这些指标正在不断更新。因此,当作者发表文章时,他的计数不会立即更新,但最终会保持一致。这是文档数据库的一个重要部分
希望这能有所帮助你的结构基本上就是我所想的——在帖子中包含了非规范化的AuthorNames,我只是停留在AuthorPostCount上。。如果某人有10000个帖子。。另外,我不想用新的AuthorPostCount值来更新以前的10000篇文章文档。除此之外,如果加载一个包含50篇文章的页面,我也不想执行50个额外的查询来加载每篇文章的AuthorPostCount,即使是在它自己的索引中。。。我看。。。在同一个查询中,将所有50篇文章计数(如果作者发布了多篇文章,则计数会更少)都包含在一起,怎么样?类似于sql中的in子句,那么,我们是否将count变量存储在数据库中,以记录该用户的帖子数量?如果是这样,我们就不能创建另一个包含authorId、threadId和count的表了。count将给出作者在特定线程上发布的帖子数量。所以,如果我们想要那个作者的文章总数,我们可以把它们加起来。PS:我对数据库很幼稚。根据学校知识回答。