针对速度优化Firebase查询:按城市搜索用户

时间:2017-04-21 00:55:27

标签: firebase firebase-realtime-database database-schema nosql

场景:我有一个用户节点,用于存储其位置(城市和国家/地区)。我想找到位于特定城市的所有用户。然后,每个城市,我想过滤 roomType ,最后按用户的分数对用户进行排序。

问题:城市与城市国家/地区是字符串字段,因此它将是非常资源密集的string_comparison查询,以迭代所有用户以首先匹配国家/地区&那个城市。

我可以做些什么来加快搜索速度?

一种可能的方法:将City + Country“location_pair”转换为数值(例如 int_val_location_pair )。然后对 int_val_location_pair 进行整数比较。这比在国家和地区进行两次字符串比较要快得多。市。当然,我必须将映射存储为一个单独的节点。

世界上没有那么多城市(约4,000,000)所以我可以轻松地使用32字节整数来代表世界上所有城市。实际上,我将从最多10,000个不同城市的用户注册。

架构可以是这样的:

$Users:
    name:
    city:
    country:
    $int_val_location_pair:
    score:
    roomType:   
$int_val_location_pair:
    city:
    country:

问题:这是一个好方法吗?

如果是,我有下一个问题:在注册时,当用户填写国家和地区时city,我想自动为 int_val_location_pair 创建一个新值,只要在数据库中不存在location_pair(city& country)。

在这种情况下如何确保 int_val_location_pair 没有重复?假设10个人同时为同一位置注册所有(在db中不存在)。他们都查询数据库&得到确认location_pair不存在&所以最终为 int_val_location_pair 创建一个新值,导致重复。我该如何避免这种情况?

提前致谢。

1 个答案:

答案 0 :(得分:0)

为什么不为树中的每个位置保留用户ID列表?

viewController

通过它,您可以使用以下命令查找特定城市中用户的UID:

usersByLocation
  $country
    $city
      uid1: true
      uid2: true