【问题标题】:will my structure for database in firebase affect the speed of loading?我在firebase中的数据库结构会影响加载速度吗?
【发布时间】:2016-10-09 22:54:01
【问题描述】:

我正在使用 firebase 作为我的应用程序的后端。我的应用程序将是某种费用跟踪器。我认为我应该重组我的数据以便我可以轻松过滤日期的方式就是这样。

uid/expenses/category/year/month/day/uniquekey/details

深入了解快照会是这样的

func retrieveData (){
    _ = dataRef.observeEventType(.ChildAdded, withBlock: { (snapshotOne) in

        if let snapshotTwo = snapshotOne.children.allObjects as? [FIRDataSnapshot] {
            if let snapshotThree = snapshotTwo.children.allObjects as? [FIRDataSnapshot] {
                if let snapshotFour = snapshotThree.children.allObjects as? [FIRDataSnapshot] {
                    for item in snapshotFour {
                        //retrieve details
                    }
                }
            }
        }
    }
}

我不知道必须如此深入地挖掘数据库的后果是什么,以及我的数据库结构是否还可以?有人可以建议吗?

【问题讨论】:

标签: ios database swift firebase


【解决方案1】:

对数据结构的任何更改都会影响您的数据库。

Firebase 更喜欢扁平化数据 & 使用索引来定义复杂的关系:

在构建应用程序时,最好下载列表的子集。如果列表包含数千条或更多记录,这尤其常见。当这种关系是静态的、单向的时,我们可以使用查询来获取数据子集,或者简单地将条目嵌套在逻辑分组下。

{
    "messages": {
      "john": {
          "rec1": "Walk the dog",
          "rec2": "Buy milk",
          "rec3": "Win a gold medal in the Olympics"
      }
    }
  }

但是,我们已经知道扁平化数据是一种最佳做法。所以让我们看看为什么,通过检查这个结构开始崩溃的地方。如果我们进入更动态的东西,比如共享聊天室,那么突然我们的数据(例如房间列表、消息列表)现在具有双向关系。 用户可以属于一个组,组包含一个用户列表。解析此数据结构的第一次尝试可能如下所示:

    {
    "users": {
      "mchen": { "name": "Mary Chen" },
      "brinchen": { "name": "Byambyn Rinchen" },
      "hmadi": { "name": "Hamadi Madi" }
    },
    "groups": {
      "alpha": {
         "name": "Alpha Tango",
         "members": {
            "m1": "mchen",
            "m2": "brinchen",
            "m3": "hamadi"
         }
      },
      "bravo": { ... },
      "charlie": { ... }
    }
  }

您可以在此处阅读更多内容。

https://www.firebase.com/docs/web/guide/structuring-data.html

您的数据库的整个结构与您要存储的数据结构有关。 还可以考虑阅读有关安全和规则的更多信息。

https://www.firebase.com/docs/security/quickstart.html

【讨论】:

  • 我已经读过这个了。但我不知道它如何适用于我。所有张贴的费用仅供用户自己使用。没有其他人会访问它们。
  • 您需要考虑的只是对一个或对多个关系。它将直接帮助您加快访问逻辑组的速度。
  • 我想这是一对一的关系。因为如果你能看到的话,你上传的就是这些。所以在这种情况下我的数据结构应该没问题?即使因为细节有这么多节点。
  • 我想您应该在上面的链接中研究 Firebase 更喜欢扁平化数据和使用索引来定义复杂关系。在扁平化数据和定义复杂关系之间建立平衡可能有助于您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多