Firebase:我的数据结构应该有多扁平?

时间:2017-07-30 22:14:33

标签: firebase firebase-realtime-database

我正在构建一个跟踪用户位置并更新Firebase的应用。我已经阅读了有关结构数据的文档,但仍然有一些问题。

我考虑以两种方式之一构建数据,但无法确定哪一种方式。

users
  $id 
    -position
    -other attr

VS

user_position
  $id

users
  $id
    -other attr. 

在什么情况下,第一个设计最好,第二个?

1 个答案:

答案 0 :(得分:2)

如果每个用户只保留一个位置(事实上你使用单数user_position就是这种情况),两个结构之间没有任何有用的区别。在这种情况下,用户的位置只是另一个属性,只是恰好有两个值(lat和lon)。

但是如果你想为每个用户保留多个位置,那么你的第一个结构是混合实体类型:users和user_positions。对于Firebase数据库,这是一种反模式。

两个最常见的原因是:

  • 假设您要显示用户名列表(或任何特定的单值属性)。使用第一个结构,您还需要读取所有用户的所有位置列表,以获取名称列表。使用第二个结构,您只需阅读用户的属性。如果这仍然是您需要的数据,请考虑保留/user_names列表以获得最佳读取性能。
  • 许多开发人员最终都希望为用户位置和其他用户属性提供不同的访问规则。在第一个结构中,只能通过将读取权限从顶部/users向下推到树中的较低位置来实现。在第二种结构中,您只需为/users/user_positions提供单独的权限。