【发布时间】:2018-09-06 10:29:09
【问题描述】:
如何获取 Firestore 中按时间排序的地理位置半径中的最新文档?
我有一个解决方案来获取指定地理位置半径内的 Firestore 数据库中的所有文档。
我需要这些按时间排序。正如您想象的那样,在洛杉矶这样的地方,附近可能有 10,000 个帖子,而我目前的解决方案无法扩展。
这是我在 SWIFT 4 中的 Firestore 查询:
var query = docRef.whereField("geo", isGreaterThan: lesserGeopoint).whereField("geo", isLessThan: greaterGeopoint)
这足以让我获得最近的帖子。所以,一旦我有了所有最接近的帖子,我就会解析它们并将它们放入一个数组中,然后按如下方式对数组进行排序:
self.posts.sort(by: { $0.time > $1.time })
这可行,但是,我使用虚拟数据进行了规模测试,结果如下:
(N = amount of posts that are queried and loaded)
N LOAD TIME (average)
-----------------------------------
0 303 ms
1 323 ms
100 393 ms
500 637 ms
1000 1011 ms (1 second)
5000 10439 ms (10.4 seconds)
任何超过 1,000 个附近帖子的内容都不实用。我也不能将查询限制为 1000 个文档,因为它没有在 Firestore 服务器上按时间排序,所以它只需要附近的 1000 个随机文档,然后按时间排序。但是可能有一个更新的帖子没有进入该批次。
我如何找到一种解决方案来获取最近的、附近的帖子,并限制查询以便我的应用可以扩展。
【问题讨论】:
-
听说过 GeoFire?听起来像是实时数据库的用例?
-
@RonRoyston 我已经多次使用 GeoFire。我的问题是要求 Firestore 的解决方案,而不是实时数据库。另外,我不完全确定您是否阅读了这个问题。 Geofire 仅用于地理查询,不支持按时间戳排序和限制。
标签: swift firebase google-cloud-firestore