如何在NoSQL中跟踪记录关系?
我试图找出在NoSQL KVP或Document数据库中相当于外键和索引。因为没有枢轴表(添加键标记两个对象之间的关系)我真的很困惑,如何能够以一种对于普通网页有用的方式检索数据。
说我有一个用户,这个用户在网站上留下了很多评论。我可以想到的唯一方法来跟踪用户的评论是 >将它们嵌入用户对象(这看起来很无用) 但是,以第二个例子,当你使用它来跟踪其他事情,例如一个称为“active_comments”的密钥,它可能包含3000万个id,它使它花费一个TON查询每个页面只是知道一些最近活动评论。它也很容易出现竞态条件,因为许多页面可能会尝试同时更新它。 如何在NoSQL数据库中跟踪如下所示的关系? >所有用户的评论 还是我不正确地想这个?
所有关于如何以“NoSQL方式”存储多对多关联的答案减少了同样的事情:冗余地存储数据。
在NoSQL中,不要根据数据实体之间的关系设计数据库。您根据将针对其运行的查询设计数据库。使用相同的标准来对关系数据库进行反标准化:如果数据具有凝聚力(认为逗号分隔列表中的值而不是归一化表)更重要,那么就这样做。 但是这不可避免地以牺牲其他类型的查询(给定用户对任何文章的评论)为代价优化一种类型的查询(例如,任何用户针对给定文章的评论)。如果您的应用程序需要同时优化两种类型的查询,则不应该进行反规范化。同样,如果您需要以关系方式使用数据,则不应使用NoSQL解决方案。 存在非规范化和冗余的风险,冗余数据集将彼此不同步。这被称为异常。当使用规范化的关系数据库时,RDBMS可以防止异常。在非规范化的数据库或NoSQL中,编写应用程序代码以防止异常成为您的责任。 可能会认为,对于NoSQL数据库来说,做一些防止异常的努力是很好的。有一个范例可以做到这一点 – 关系范式。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |