搜索最近的店铺 or 找最多店铺的点

这两个问题,应该是电商网站或者说 O2O 业务中最常用的功能。在之前,我也想过该题的解决方法。 第一个问题最简单的方法就是,一个 for 遍历周围所有的数据。通过欧式距离的判断,进行从小打大的排序判断,然后推送结果给用户。但是,当商铺基数足够大的时候,似乎,每次的 O(N) 操作,都是一个不小的时间开销。于是,可以通过进行地区的划分进行优化。 比如在二维坐标系中,划分为 N * N 的正方形区域。进行距离判断的时候,只需要查询用户当前区域和周围 8 个区域的店铺,然后进行搜索,然后排序。同时,也可以针对每个区域进行 cache,因为某个区域间的商铺的排序顺序基本不会有太大变化,而且即使是不同的距离,基本也就是 50 ~ 100 米的误差,某种程度上,用户也能接受这样的误差。…