如何在NoSQL中跟踪记录关系?

前端之家收集整理的这篇文章主要介绍了如何在NoSQL中跟踪记录关系?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找出在Nosql KVP或Document数据库中相当于外键和索引。因为没有枢轴表(添加标记两个对象之间的关系)我真的很困惑,如何能够以一种对于普通网页有用的方式检索数据。

说我有一个用户,这个用户在网站上留下了很多评论。我可以想到的唯一方法来跟踪用户评论

>将它们嵌入用户对象(这看起来很无用)
>创建并维护user_id:comments值,其中包含每个注释的键[comment:34,comment:197,etc …]的列表,以便我可以根据需要提取它们。

但是,以第二个例子,当你使用它来跟踪其他事情,例如一个称为“active_comments”的密钥,它可能包含3000万个id,它使它花费一个TON查询每个页面只是知道一些最近活动评论。它也很容易出现竞态条件,因为许多页面可能会尝试同时更新它。

如何在Nosql数据库中跟踪如下所示的关系?

>所有用户评论
>所有活动评论
>所有标有[keyword]的帖子
>所有学生在俱乐部 – 或所有俱乐部的学生在

还是我不正确地想这个?

所有关于如何以“Nosql方式”存储多对多关联的答案减少了同样的事情:冗余地存储数据。

在Nosql中,不要根据数据实体之间的关系设计数据库。您根据将针对其运行的查询设计数据库。使用相同的标准来对关系数据库进行反标准化:如果数据具有凝聚力(认为逗号分隔列表中的值而不是归一化表)更重要,那么就这样做。

但是这不可避免地以牺牲其他类型的查询(给定用户对任何文章评论)为代价优化一种类型的查询(例如,任何用户针对给定文章评论)。如果您的应用程序需要同时优化两种类型的查询,则不应该进行反规范化。同样,如果您需要以关系方式使用数据,则不应使用Nosql解决方案。

存在非规范化和冗余的风险,冗余数据集将彼此不同步。这被称为异常。当使用规范化的关系数据库时,RDBMS可以防止异常。在非规范化的数据库或Nosql中,编写应用程序代码以防止异常成为您的责任。

可能会认为,对于Nosql数据库来说,做一些防止异常的努力是很好的。有一个范例可以做到这一点 – 关系范式。

原文链接:https://www.f2er.com/nosql/203468.html

猜你在找的NoSQL相关文章