【发布时间】:2011-07-27 13:40:17
【问题描述】:
对于文档数据库,我还没有理解一件事,那就是如何处理共享对象。拿这两个不同的对象/文件:
Email
BelongsTo (User object)
Comment
WrittenBy (User object)
用户是两个文档中的同一用户。
- 实际用户是存储在文档中还是某种参考(如在 RDBMS 中)
- 如何处理对用户的更改(新名字等)?
【问题讨论】:
对于文档数据库,我还没有理解一件事,那就是如何处理共享对象。拿这两个不同的对象/文件:
Email
BelongsTo (User object)
Comment
WrittenBy (User object)
用户是两个文档中的同一用户。
【问题讨论】:
这取决于您使用的 NoSQL 实现。您可以通过以下几种方式做到这一点:如果您使用的是 JCR(JackRabbit、CRX 等),您实际上可以存储对用户节点的引用,或者您可以采用关系方法并存储用户节点的地址。
【讨论】:
我会说这取决于您计划如何使用数据。例如,如果它是阅读密集型的并且您只访问对象中用户的用户名,那么也许最好在评论中复制该信息。如果您允许更改用户名,并且使用最新的用户名更新 cmets 很重要,这当然会导致更高的更新成本。我们已经为我们的读取模型使用了文档存储,并采用了复制数据的方式,因为我们为一个视图上下文构建了有效的视图/文档。当然更新会占用更多资源,但对我们来说没关系。我也一直在使用其他构造,使用基于 ids 的 doc1 和 doc2 之间的“手动”引用。与使用 O/RM 相比,手动工作要多一些,但魔法要少得多。
有一个关于 BlogPost 的经典示例 ---- 评论,其中 cmets 可以包含在我们可以通过 ID 访问的帖子中。再说一次,你将如何使用它?你会在不显示帖子的情况下使用 cmets 吗?您在看帖子时总是对 cmets 感兴趣吗? MongoDB 中文件大小(如 16MB)的总存储是否存在潜在限制?那么你可能需要分开。
我知道一个非常模糊的回答,但这也是一个非常“取决于用例”的问题。
【讨论】: