【问题标题】:MongoDB: Embedded Documents vs Multiple CollectionsMongoDB:嵌入式文档与多个集合
【发布时间】:2013-05-21 07:49:16
【问题描述】:

我必须在 MongoDB 数据库中对我的数据进行建模。 我的数据是posts和cmets,所以我想到的方法有两种:

  1. 1 个状态集合,每个状态都嵌入了 cmets

  2. 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,以改善用户体验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多