2016-06-09 101 views
1

我正在使用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 
        } 
       } 
      } 
     } 
    } 
} 

我不知道什么样的后果是有深入挖掘数据库以及我的数据库结构是否正常?任何人都可以建议吗?

+0

的〔火力地堡文档建议针对嵌套数据](https://firebase.google.com/docs/database/android/structure-data#avoid_nesting_data),由于各种原因。但像这样循环快照很好。 '.ChildAdded'加载'snapshotOne','snapshotTwo','snapshotThree'和'snapshotFour'的所有数据。 –

回答

3

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

火力地堡宁愿展数据 &使用指标来定义复杂的关系:

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

{ 
    "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

+0

我确实已经读过。但我不知道它如何适用于我。所有发布的费用仅供用户自己使用。没有人会访问它们。 – Chris

+0

所有你需要考虑的是一个或多个关系。 它将直接帮助您加速访问逻辑组。 –

+0

好吧,这是一对一的关系,我想。因为你上传的东西,如果你能看到这一切。所以在这种情况下,我的数据结构应该没问题?即使由于细节而有很多节点。 – Chris