地理数据查询优化

时间:2016-01-19 22:53:16

标签: geolocation quadtree spatial-index geohashing location-based-service

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

  • 用户可以通过向包含资源名称和用户当前位置(经度和纬度)的Web服务发送请求来创建资源
  • Web服务将在内部以某种集合
  • 存储有关此资源的元数据
  • 用户可以在Web服务中查询距其当前位置5公里范围内的资源列表

我想到的第一个问题之一就是可扩展性。让我们假设在未来的某个时刻,服务器将保存100万个资源的元数据。当用户查询附近的结果时,循环通过100万个条目来计算距离将需要永远。

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

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

我希望也许有人在类似的事情上工作,可以分享他对于考虑这个用例和我计划使用的技术最合适的方法的见解。此外,对如何实施它的简短描述将对我有所帮助!

1 个答案:

答案 0 :(得分:0)

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

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

显然MongoDB还附带了对地理数据的内置支持。实际上,甚至像MySQL或SQLite这样的RDBMS都具有这样的功能。