我试图找出在Nosql KVP或Document数据库中相当于外键和索引。因为没有枢轴表(添加键标记两个对象之间的关系)我真的很困惑,如何能够以一种对于普通网页有用的方式检索数据。
说我有一个用户,这个用户在网站上留下了很多评论。我可以想到的唯一方法来跟踪用户的评论是
>将它们嵌入用户对象(这看起来很无用)
>创建并维护user_id:comments值,其中包含每个注释的键[comment:34,comment:197,etc …]的列表,以便我可以根据需要提取它们。
但是,以第二个例子,当你使用它来跟踪其他事情,例如一个称为“active_comments”的密钥,它可能包含3000万个id,它使它花费一个TON查询每个页面只是知道一些最近活动评论。它也很容易出现竞态条件,因为许多页面可能会尝试同时更新它。
>所有用户的评论
>所有活动评论
>所有标有[keyword]的帖子
>所有学生在俱乐部 – 或所有俱乐部的学生在
还是我不正确地想这个?
所有关于如何以“Nosql方式”存储多对多关联的答案减少了同样的事情:冗余地存储数据。
原文链接:https://www.f2er.com/nosql/203468.html在Nosql中,不要根据数据实体之间的关系设计数据库。您根据将针对其运行的查询设计数据库。使用相同的标准来对关系数据库进行反标准化:如果数据具有凝聚力(认为逗号分隔列表中的值而不是归一化表)更重要,那么就这样做。
但是这不可避免地以牺牲其他类型的查询(给定用户对任何文章的评论)为代价优化一种类型的查询(例如,任何用户针对给定文章的评论)。如果您的应用程序需要同时优化两种类型的查询,则不应该进行反规范化。同样,如果您需要以关系方式使用数据,则不应使用Nosql解决方案。
存在非规范化和冗余的风险,冗余数据集将彼此不同步。这被称为异常。当使用规范化的关系数据库时,RDBMS可以防止异常。在非规范化的数据库或Nosql中,编写应用程序代码以防止异常成为您的责任。