地理数据查询优化

Geodata Querying Optimisations

我打算编写一个由 Node.js 驱动的 RESTful 网络服务,我将把它用于提供某种基于位置的功能的移动应用程序。最基本的用例看起来像这样:

我想到的第一个问题是可伸缩性。假设在未来的某个时刻,服务器将保存 100 万个资源的元数据。当用户查询附近的结果时,循环遍历 100 万个条目来计算距离将花费很长时间。

那里有许多具有相同流程的服务,所以我认为实现这样的事情不会花费我很多时间。我可能错了。

我现在花了两天时间研究经过验证的方法和算法。到目前为止,我已经阅读了所有我能掌握的关于 QuadTrees、Geohases、具有空间索引支持的数据库、公式等的所有内容。但是,我仍然无法全面了解一切将如何运作。

我希望也许从事过类似工作的人可以分享他的见解,考虑到这个用例和我计划使用的技术,哪种方法最合适。另外,关于如何实现它的简短描述会对我有很大帮助!

对于那些出于好奇也在寻找有关此主题的更多信息的人,我的回答可能不会提供太多许可。但是,here 中的一些答案可能会帮助您了解如何使用 Geohashes 实现邻近搜索。

我的方法是,在对 Redis 进行一些研究之后,不会使事情过于复杂,而只是使用已经存在的工具。它对空间索引具有开箱即用的支持,很可能会满足我对该项目的所有持久性要求。

显然 MongoDB 还附带了对地理数据的 built-in 支持。事实上,即使像 MySQL 或 SQLite 这样的 RDBMS 也具有这样的功能。