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