场景:我有一个用户节点,用于存储其位置(城市和国家/地区)。我想找到位于特定城市的所有用户。然后,每个城市,我想过滤 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 创建一个新值,导致重复。我该如何避免这种情况?
提前致谢。
答案 0 :(得分:0)
为什么不为树中的每个位置保留用户ID列表?
viewController
通过它,您可以使用以下命令查找特定城市中用户的UID:
usersByLocation
$country
$city
uid1: true
uid2: true