我的firebase数据库结构会影响加载速度吗?

时间:2016-06-09 10:28:05

标签: ios database swift firebase

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

UID /费用/分类/年/月/日/唯一键/细节

深入了解快照会是这样的

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
                    }
                }
            }
        }
    }
}

我不知道如何深入挖掘数据库以及我的数据库结构是否合适会带来什么后果?有人可以建议吗?

1 个答案:

答案 0 :(得分:3)

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

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