检索大型Firebase数据库的表面数据

时间:2017-09-13 23:08:29

标签: firebase firebase-realtime-database

我在Firebase中有一个大数据库。在我看来,这是错误的结构。 试图获取参考快照,处理结果需要花费太多时间。 但是,我不需要检索所有数据。我不需要深层次的东西,但我不知道如何才能得到肤浅的东西。

所以结构是这样的:

clients {
    1234 {
      name: 'Paul',
      last_name: 'Mcartney',
      city: 'Liverpool',
      account_movements: {
           item1: {
              ...
           }
      }
    }
    1234 { ... }
    1236 { ... }
}

让我们知道我需要的是除account_movements之外的所有客户数据。

2 个答案:

答案 0 :(得分:1)

因为你在谈论一个大数据库,我建议你稍微重组一下你的数据库。正如Frank所说,当您尝试读取节点时,您将获得整个节点。这意味着每次向特定引用添加侦听器时,都会下载该对象的全部信息。请注意,您无法仅下载每个节点的属性的子集,这就是您需要denormalize数据库的原因。因为Firebase中的一个重要规则是尽可能使数据库变平,我建议您从每个用户处获取account_movements并将其作为顶级节点单独添加。为了更好地理解,我建议您阅读这篇文章Structuring your Firebase Data correctly for a Complex App,并参阅本教程Denormalization is normal with the Firebase Database

希望它有所帮助。

答案 1 :(得分:0)

您可以创建新节点" account_movements"使用自己的ID并将其添加到用户,或者您可以为没有用户详细信息的用户创建另一个节点。第二种解决方案需要更多空间,但更容易进行读取操作,因为您只需创建1个调用(具有详细信息或没有详细信息的用户),而不是读取account_movements的id以创建第二个调用。在此示例中,您可以使用用户ID来命名account_movements的ID。但这并不总是可能的