我需要询问有关 Firestore 读数的信息,我开发了一个简单的应用程序,它基于半径(最大 10 公里)找到离我最近的人。问题在于,在同时使用该应用程序的 10,000 名注册用户中,Firestore 的读数呈指数增长。我使用flutter_geofire插件进行颤振。有没有办法智能地缓存这些数据?理论上,firestore 会保存电话,但经过各种测试后我不明白多久。谢谢!
问问题
486 次
1 回答
0
我不知道缓存,但一些一般建议是将用户分成几部分。使用 GPS 时,您可以使用Google的反向地理编码 API检测到该人所在的国家/地区。此外,您还可以使用Administrative_area_level_1来获取州/省,或者您可以使用Reverse Geocoding Api找到其他靠近的城市或州。
因此,当用户 1 登录到应用程序时,您将获取坐标,使用 Google API 并获取 Country: UK, ClosestCity: London, NearbyCities: [oxford,cambridge,...]。
然后在firestore中写入。
cities -> UK -> London -> rendomgeneratedId - {userinfo&coordinates}
cities -> UK -> Oxford -> rendomgeneratedId - {userinfo&coordinates}
cities -> UK -> Cambridge -> rendomgeneratedId - {userinfo&coordinates}
现在,当居住在牛津的用户 2 将半径设置为 10 公里时,应用程序会获取用户 2 的坐标 -> 查找用户 2 的国家、当前城市和附近城市。并在 Cloud Firestore 中使用经度和纬度进行搜索:
//Search in Oxford
cities.UK.Oxford.rendomgeneratedId.where("longitute", "<", 100)
cities.UK.Oxford.rendomgeneratedId.where("longitute", ">", 50)
//same for latitude
//Search in London
cities.UK.London.rendomgeneratedId.where("longitute", "<", 100)
cities.UK.London.rendomgeneratedId.where("longitute", ">", 50)
etc.
我推荐使用 Flutter 包 LatLong 来计算距离中心 0.5 公里的目的地点:
final Distance distance = const Distance();
final num distanceInMeter = (EARTH_RADIUS * math.PI / 4).round();
final p1 = new LatLng(0.0, 0.0);
final p2 = distance.offset(p1, distanceInMeter, 180);
// LatLng(latitude:-45.219848, longitude:0.0)
print(p2.round());
于 2020-02-03T08:16:36.443 回答