加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 13:34:30 所属栏目:百科 来源:网络整理
导读:我试图找出在NoSQL KVP或Document数据库中相当于外键和索引。因为没有枢轴表(添加键标记两个对象之间的关系)我真的很困惑,如何能够以一种对于普通网页有用的方式检索数据。 说我有一个用户,这个用户在网站上留下了很多评论。我可以想到的唯一方法来跟踪用
我试图找出在NoSQL KVP或Document数据库中相当于外键和索引。因为没有枢轴表(添加键标记两个对象之间的关系)我真的很困惑,如何能够以一种对于普通网页有用的方式检索数据。

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

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

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

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

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

还是我不正确地想这个?

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读