NoSQL计划的例子

时间:2017-02-17 01:35:19

标签: sql database nosql

我正在阅读关于NoSQL的事情。我知道它不是基于关系,但我无法弄清楚如何做一些基本的事情。 (我没有找到关于它的真实示例代码)。

我想存储用户,帖子和评论。

SQL版本:

user's table: user_id, username
posts's table: post_id, user_id, content
comments's table: comment_id, content

好的,简单。

在NoSQL中,我选择的是(100%功能,我现在不使用像MongoDB等任何技术):

users: 
{
    id: XX,
    username: "John"
},
{
        id: OO,
        username: "Mike"
}

posts:
{
    id: YY,
    content: "How are you all ?",
    user: {
        id: OO,
        username: "Mike"
    },
    comments: {
        id: ZZ,
        content: "Fine",
        user: {
            id: XX,
            username: "John"
        }
    }   
}

我本可以在帖子和评论中存储用户的id来代替整个用户,但我使用的是NoSQL,而不是SQL,所以我没有这样做。

首先?这种数据模型对NoSQL来说是否合适?

其次,如果上一个问题是,如果用户XX(John)更改其“Tony”用户名怎么办?我可能需要更新他的所有帖子,每个评论都一样吗?!让我们想象一下,在用户的生命中发布了10 000多条评论,wtf。所以我猜我做错了。

你能否澄清我的误解?

1 个答案:

答案 0 :(得分:0)

问题的问题在于它假设所有NoSQL数据库都以相同的方式工作,基于问题看起来您的问题可能与如何存储"文档" (JSON)在数据库中以稍后可以检索内容的方式,我将从Document Stores的角度回答这个问题:

正如您已经发现NoSQL不提供关系,因此您需要手动处理此问题。在NoSQL World中,去规范化通常是确保您可以在较少往返数据库中检索文档的第一步,因此您将这些用户名添加到帖子中的方法是典型方法。

您所说的问题完全有效,如果用户名更改会发生什么?它有效但不太真实,博客中的用户名通常是所有内容的关键,所以改变它是一种很大的改变,而且通常不允许。

要执行关系,您可以稍后检索带有id的文档,并在需要时存储ID,这样您就可以像在SQL世界中那样规范化数据库,在这种情况下,您可能需要使用索引来确保如果id是用户而不是文档内部id,则使用用户名作为文档本身的id,这是一个很好的性能。在djondb将是这样的:

{ 
  "_id": "myuser",
  "name": "Cross"
}

,博客将有

{ 
   "userid": "myuser", 
   "content": "Hello world"
}

现在,如果您需要更新多个文档怎么办?在这种情况下,您需要djondb,一个支持多个文档交易的文档数据库,以保持数据库的一致性

有关数据建模的更多信息:http://djondb.com/nosql-masterdetail-sample/

有关djondb中交易的更多信息:http://djondb.com/section/transactions/

免责声明:我与djondb合作,所以我总是有偏见!

希望这有帮助,