gpt4 book ai didi

mongodb - NoSql 引用数据

转载 作者:IT老高 更新时间:2023-10-28 13:10:34 27 4
gpt4 key购买 nike

免责声明:通过引用数据,我不是指引用完整性

我正在学习 nosql,想了解如何对数据进行建模。例如,在 CMS 应用程序的典型关系数据库中,您可能有两个表:article 和 author,其中 article 有对作者的引用。

在nosql系统中,你可以这样创建文章文档,因为它们只是disguised object graph

{
title: "Learn nosql in 5 minutes",
slug: "nosql_is_easy",
author: {firstName: "Smarty"
lastName: "Pants"
}

{
title: "Death to RDBMS",
slug: "rdbms_sucks",
author: {firstName: "Smarty"
lastName: "Pants"
}

等等……

假设有一天,Smarty Pants 先生决定将他的名字改为 Regular Joe,因为 nosql 已经无处不在。在这种用例中,每篇文章都需要扫描并更新作者姓名。

所以我的问题是,应该如何在 nosql 中对数据进行建模以适应 CMS 的基本用例,以便 性能与 RDBMS 相当或更快mongodb ,例如,声称 CMS 是一个用例 ...

编辑:

很少有人建议对数据进行标准化,例如:

article 
{
title: "Death to RDBMS",
slug: "rdbms_sucks",
author: {id: "10000001"}
}

author
{
name: "Big Brother",
id: "10000001"
}

但是,由于 nosql 在设计上缺少连接,因此您必须使用类似 mapreduce 的函数来将数据组合在一起。如果这是您的建议,请评论此类操作的性能。

编辑 2:

如果您认为 nosql 不适用于任何需要引用数据的数据,请同时解释原因。这似乎使 nosql 的用例相当有限,因为任何合理的应用程序都将包含关系数据。

编辑 3:

Nosql doesn't mean non-relational

最佳答案

您的数据显然是相关的:一篇文章有​​一个作者。您可以像在关系存储中一样在像 MongoDB 这样的 NOSQL 存储中建模您的数据,但是因为数据库中没有连接,您必须对数据库进行两次调用,所以您没有获得任何东西。

但是......你可以用 NOSQL 存储做的是对数据进行一定程度的非规范化以提高性能(单次往返即可获得显示文章所需的一切)但以立即一致性为代价:权衡始终准确的作者姓名最终准确的作者姓名。

例如,您可以在文章中使用它:

author: {firstName: "Smarty", lastName: "Pants", _id:DE342624EF }

现在您可以非常快速地显示文章,当有人更改他们的名字时,您可以启动后台任务来更新所有现有文章,或者您可以等待定期一致性扫描来修复它。

许多主要网站不再为您提供即时一致性。您所做的更改最终只会被网站上的其他用户看到。

关于mongodb - NoSql 引用数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com