如何快速从100万条数据记录中获得最接近的100分?

时间:2014-08-25 01:43:33

标签: algorithm geo

给出一个A点,从一百万条数据记录中得到最接近的100分

  • 数据库 MySql
  • 百万经度和纬度记录
  • 这些点表示用户登录时的当前位置,因此可能会发生变化。

情形:

当用户打开一个页面时,显示最近的前100名其他人。

2 个答案:

答案 0 :(得分:2)

  1. 为数据库设置空间扩展,如果尚未这样做的话。
  2. 将1M个地点的纬度/经度存储在数据库的地理类型列中。
  3. 在该列上创建空间索引。
  4. 根据您感兴趣的点与表中的位置之间的距离,运行带有WHERE子句的SELECT查询。该查询将使用上述索引。
  5. 这是一个很好的article在MySQL 5.6中使用空间扩展来完成这类事情。

答案 1 :(得分:0)

http://en.wikipedia.org/wiki/Geohash可能是加快平均情况的快速方法,但最坏情况下的行为仍然很糟糕。本文建议您通过geohash进行索引,并在查询中检索边界框中相当于geohash前缀的所有点。如果边界框很小并且您发现其中的匹配比边界框外的任何点更接近,那么您很快就会成功,但这些都不是真的。