【问题标题】:MongoDB: Embedded Documents vs Multiple CollectionsMongoDB:嵌入式文档与多个集合
【发布时间】:2013-05-21 07:49:16
【问题描述】:
我必须在 MongoDB 数据库中对我的数据进行建模。
我的数据是posts和cmets,所以我想到的方法有两种:
1 个状态集合,每个状态都嵌入了 cmets
1 个状态集合和 1 个 cmets 集合
考虑到,从用户体验方面来看,用户会看到一个状态列表,而他有时只是要求查看给定状态的 cmets。
还要考虑用户可能要求查看给定用户的 cmets:如果 cmets 嵌入在状态中,则检索这些信息的成本可能会更高。
您建议哪种解决方案?
谢谢!
【问题讨论】:
标签:
mongodb
collections
embedded-resource
【解决方案1】:
这取决于 cmets 数量和请求的实际频率。因为如果你会有几个cmets,你不应该考虑它。此外,如果您将使用两个集合,查询会更复杂,并且与大大小的 cmets 集合相比,查询会比一个集合中的一个选择慢。实际上,非规范化是在 MongoDB 中存储数据的好方法。
【解决方案2】:
通过查看我认为的解决方案和相关查询,您必须考虑某种查询发生的频率。有一点适用,一种设计不能解决所有问题而不引起一些问题。例如,如果实时查找与状态相关的 cmets 的人越来越多,以查看来自用户的所有 cmets。我认为在状态中嵌入 cmets 会有更好的用户体验。如果您可以拥有这种模式,mongodb 允许对子文档进行索引
Status : " I am good",
Comments : [{ Comment : "great" , by : "UserOne" } , [{ Comment : "great" , by : "UserOne" }]
你可以索引 Comments.by 所以用户对所有 cmets 的搜索也会很好。在获取状态时,您可以缓存评论并从缓存中获取 cmets,以改善用户体验。