扁平数据结构与多个数据库 - NoSQL

问题描述 投票:0回答:1

我是前端开发人员,所以我没有任何创建数据库的经验。我选择 Firebase 是因为我之前用过它进行身份验证,这对我来说非常简单。

当我阅读文档时,我看到一篇文章构建数据库,在数据结构的最佳实践部分,它说“避免嵌套数据”。我理解这一点,但知道我有一个问题:拥有多个数据库而不是扁平结构更好还是它们平均工作原理相同?

我知道我必须付费才能拥有多个数据库,所以这不是我问题的一部分。我对性能和维护感兴趣

据我所知,在 SQL 中我们创建了很多表,然后设置它们之间的关系,因此我认为在 NoSQL 结构中我可以创建多个数据库并模仿相同的东西

例如,我有一个聊天,所以在平面结构中我可以创建这样的东西:

{
  "chatsId": [
    "some-chat-id-1",
    "some-chat-id-2",
    ...
  ],
  "chatsInfo": {
    "some-chat-id-1": {
      "between": [
         "some-user-id-1",
         "some-user-id-2"
       ],
       messages: "some-messages-id-1"
    },
    "some-chat-id-2": {
      "between": [
         "some-user-id-3",
         "some-user-id-4"
       ],
       messages: "some-messages-id-2"
    },
    ...
  },
  "messages": {
    "some-messages-id-1": [
      {
        ... some message data 1
      },
      {
        ... some message data 2
      },
      ...
    ],
    "some-messages-id-2": [
      {
        ... some message data 1
      },
      {
        ... some message data 2
      },
      ...
    ]
  },
}

但是有了多个数据库,我可以用这种方式做同样的事情:

ChatsDB

{
  "chatsId": [
    "some-chat-id-1",
    "some-chat-id-2",
    ...
  ]
}
ChatsInfoDB

{
  "chatsInfo": {
    "some-chat-id-1": {
      "between": [
         "some-user-id-1",
         "some-user-id-2"
       ],
       messages: "some-messages-id-1"
    },
    "some-chat-id-2": {
      "between": [
         "some-user-id-3",
         "some-user-id-4"
       ],
       messages: "some-messages-id-2"
    },
    ...
  }
}
MessagesDB

{
  "messages": {
    "some-messages-id-1": [
      {
        ... some message data 1
      },
      {
        ... some message data 2
      },
      ...
    ],
    "some-messages-id-2": [
      {
        ... some message data 1
      },
      {
        ... some message data 2
      },
      ...
    ]
  }
}

抱歉,如果我问了一个愚蠢的问题,我只是很困惑

firebase firebase-realtime-database database-design nosql
1个回答
0
投票

您不应该使用多个数据库来分割数据。只需使用其中的单个数据库和模型即可。

老实说,除此之外很难得出任何结论,因为 NoSQL 数据库的最佳数据模型主要取决于应用程序的用例。我经常将此解释为使用与应用程序屏幕中显示的内容紧密匹配的数据模型。

从最初的几个用例的简单模型开始,然后随着添加更多需要额外数据的用例而改进该模型。您的初始模型对于第一次尝试来说似乎很好,尽管我可能会将

chatsId

 数组更改为具有相同键和 
chatsId
 作为其值的 
true
 映射。有关更多信息,请参阅
最佳实践:Firebase 中的数组

要了解有关数据建模的更多信息,我建议阅读

NoSQL 数据建模,观看 SQL 开发人员的 Firebase,可能还需要 了解 Cloud Firestore(适用于 Firebase 的其他数据库,但有很多关于如何思考 NoSQL 数据建模)。

© www.soinside.com 2019 - 2024. All rights reserved.