【问题标题】:Handling shared objects in Nosql (documentstore)在 Nosql (documentstore) 中处理共享对象
【发布时间】:2011-07-27 13:40:17
【问题描述】:

对于文档数据库,我还没有理解一件事,那就是如何处理共享对象。拿这两个不同的对象/文件:

Email
    BelongsTo (User object)

Comment
    WrittenBy (User object)

用户是两个文档中的同一用户。

  • 实际用户是存储在文档中还是某种参考(如在 RDBMS 中)
  • 如何处理对用户的更改(新名字等)?

【问题讨论】:

    标签: nosql document-database


    【解决方案1】:

    这取决于您使用的 NoSQL 实现。您可以通过以下几种方式做到这一点:如果您使用的是 JCR(JackRabbit、CRX 等),您实际上可以存储对用户节点的引用,或者您可以采用关系方法并存储用户节点的地址。

    【讨论】:

      【解决方案2】:

      我会说这取决于您计划如何使用数据。例如,如果它是阅读密集型的并且您只访问对象中用户的用户名,那么也许最好在评论中复制该信息。如果您允许更改用户名,并且使用最新的用户名更新 cmets 很重要,这当然会导致更高的更新成本。我们已经为我们的读取模型使用了文档存储,并采用了复制数据的方式,因为我们为一个视图上下文构建了有效的视图/文档。当然更新会占用更多资源,但对我们来说没关系。我也一直在使用其他构造,使用基于 ids 的 doc1 和 doc2 之间的“手动”引用。与使用 O/RM 相比,手动工作要多一些,但魔法要少得多。

      有一个关于 BlogPost 的经典示例 ---- 评论,其中 cmets 可以包含在我们可以通过 ID 访问的帖子中。再说一次,你将如何使用它?你会在不显示帖子的情况下使用 cmets 吗?您在看帖子时总是对 cme​​ts 感兴趣吗? MongoDB 中文件大小(如 16MB)的总存储是否存在潜在限制?那么你可能需要分开。

      我知道一个非常模糊的回答,但这也是一个非常“取决于用例”的问题。

      【讨论】:

        猜你喜欢
        • 2017-02-07
        • 2023-04-03
        • 1970-01-01
        • 2012-05-30
        • 2011-04-12
        • 2017-09-20
        • 1970-01-01
        • 2022-10-13
        相关资源
        最近更新 更多