firebase实时数据库-为了按距离对地理查询结果进行排序,我必须读取整个数据集吗



要在Firebase或Firestore中执行地理查询,有像GeoFire和GeoFirestore这样的库。但是,要按距离对地理查询的结果进行排序,必须读取整个数据集,对吗?如果地理查询产生了大量结果,那么在按距离排序时,就无法对这些结果进行分页(在后端,而不是对用户),是吗?

是的,为了按距离排序,您必须读取Geoquery范围内的所有结果。

原因是这样的查询是如何工作的:它们返回一组在地理哈希值范围内的文档,其顺序不一定与它们到查询中心的距离相同。

这也意味着无法在按距离排序的文档列表中进行有意义的分页,因为无论如何都需要读取所有结果。我能想到的最好的方法是在Cloud Functions中实现Geoquery,这样你就可以在那里进行排序/筛选,并且只有向客户端返回充满结果的页面。虽然这不会节省您的成本(因为您仍在阅读范围内的所有文档),但它将节省向用户发送文档的带宽。

要了解更多关于此类地理查询如何工作的信息,这解释了为什么它们不能按照您想要的方式进行优化,请查看我在这里的演讲视频或Jeff Delaney网站上的本文+较短视频。

最新更新