【问题标题】:Firebase: Best practice to build a data structure that can filter data by multiple criteria quicklyFirebase:构建可快速按多个条件过滤数据的数据结构的最佳实践
【发布时间】:2016-06-22 06:38:16
【问题描述】:

例如,我有一个包含 1.000.000 个用户的列表,数据如下所示:

users: {
  $userId: {
    name: "",
    sex: "",
    age: "",
    city: "",
    maritalStatus: "",
    // can be more
  }
}

我想过滤分页以下数据:单身、男性、年龄

有没有一种好的做法可以减少这种查询的痛苦?

【问题讨论】:

标签: firebase data-structures firebase-realtime-database nosql


【解决方案1】:

Firebase 没有一种直接的方式来一次查询多个孩子。

您可以构建数据以使其更容易 - 例如

users
  $userId
     gender_age:  male_27
  $userId
     gender_age:  male_32

然后,查询 30 到 40 岁之间的男性:

gender_age....queryStartingAtValue("male_30").endingAtValue("male_40")

这将缩小结果范围 - 然后您可以在代码中过滤您想要的结果,例如(概念)

  if snapshot.child("maritalStatus") = "Single" and
     snapshot.child("city") = "AnyTown" then
         //add person to list for display

您可以将其扩展一点以进一步缩小结果:

users
  $userId
     city_gender_age:  anytown_male_27

city_gender_age....queryStartingAtValue("anytown_male_30").endingAtValue("anytown_male_40")

不幸的是,如果查询不太具体,模式就会崩溃;例如如果我们要查询 30 到 40 岁之间任何城镇的男性或女性,这将不起作用。

但是,磁盘空间很便宜,因此在另一个节点中存储“重复”数据可以解决这个问题

another_node
   $user_id
      city_age: anytown_27

【讨论】:

  • 感谢您的回答。仍然愿意接受任何答案。
  • @ThịnhPhạm 这是最好的。nosql 数据库就是这样。我不知道为什么它们在我看来只在极端情况下有用时如此受欢迎。
猜你喜欢
  • 2016-09-21
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2013-02-04
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多