我需要数据库设计方面的帮助 在我的应用程序中有一个注释和回复,注释将作为每个数组项的子文档存储在数组中,但我对在哪里存储回复有点困惑,我正在考虑两种情况
(1( 将回复存储在同一注释子文档的嵌入式数组中
comments : [
{
commentId: ObjectId("XXXX"),
...
replies : [
{
replyId : ObjectId("XXX")
...
}
]
}
]
(2(新数组(回复(,每个元素都是回复的子文档
{
comments :[ .....] ,
replies: [
{
commentId: ObjectId("XXX"),
replies : [ ...]
}
]
}
提前致谢
方法 1
优点: 检索非常快,并且与MongoDB文档概念和最佳实践保持一致。只需要更新文档,它会更快
缺点:文档大小会随着每个活动而增长,并可能达到16MB的硬限制。 如果您确定评论和回复非常有限,那很好。
方法2
优点:如果您想加载回复以对用户的请求进行评论,那会很好,因为带有注释的文档将很轻量级,并且可以很好地控制数据大小
缺点:使用MongoDB 4.0,我们有多文档事务支持,这是以前不支持的,如果您能够更新回复但在更新时发生注释错误,则曾经会产生问题。 第二,每次更新你仍然不更新2个文档。
因此,方法 1 或 2 都取决于您的用例。如果评论和回复有限,方法1将是必须更好的其他明智的方法2与Mongodb 4.0事务支持。