In order to sort geoquery results by distance must I read the entire dataset?

女生的网名这么多〃 提交于 2019-11-28 12:32:17

问题


To perform geoqueries in Firebase or Firestore, there are libraries like GeoFire and GeoFirestore. But to sort the results of that geoquery by distance, the entire dataset must be read, correct? If a geoquery produces a large number of results, there is no way to paginate those results (on the backend, not to the user) when sorting by distance, is there?


回答1:


No, a geo query doesn't read the entire result set. That wouldn't scale well at all. You might want to read up on how geohashes work if you want to understand exactly how these queries are able to extract only a bounded box set of results using map coordinates. I suggest reading this blog post.




回答2:


Yes, in order to sort by distance you must read all results that fall into the Geoquery range.

The reason for this is how such queries work: they return a set of documents that are within a range of geohash values, which is not necessarily the same order as by their distance to the center of the query.

This also means that there is no way to do meaningful pagination in a list of documents that are ordered by their distance, since you need to read all results anyway. The best I can think of is implementing the Geoquery in Cloud Functions, so that you can do the sort/filter there, and only return the page-full of results to the client. While this doesn't save on your cost (as you're still reading all documents in the range), it will save bandwidth in sending documents to the user.

To learn more about how such geoqueries work, which explains why they can't be optimized the way you're looking to do, have a look at the video of my talk here or this article+shorter video on Jeff Delaney's site.



来源:https://stackoverflow.com/questions/54600722/in-order-to-sort-geoquery-results-by-distance-must-i-read-the-entire-dataset

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!