s********e 发帖数: 893 | 1 数据库里有1百万条地址,每条地址都已经计算了latitude longitude,存在了同一个
table里.
现在要做一个web application,用户输入一个地址后,要搜素数据库里所有within
10miles内的地址记录。我知道大致的做法是用户输入的这个地址通过调用google map
api可以马上得到latitude 和longitude,然后有个算法可以计算两个坐标之间的距离
。然后返回所有距离< 10miles的。现在的问题是难道每次search,都要遍历这1百万条
地址,做1百万次这个距离计算吗? 这样做肯定耗时很长,不适合实时的web
applicaiton。请问大家该如何实现?谢谢了! |
b******y 发帖数: 9224 | 2 需要用搜索技术实现. 类似Google,先准备好数据的那种 |
s********e 发帖数: 893 | |
s****y 发帖数: 983 | 4 试试这样
以搜索点为中心,画一个2R*2R的正方形,然后搜索经纬度在这个正方形内的结果。
在这个结果中,再搜索以搜索点为圆心的半径为R的圆形范围,就是最终结果。
应该比简单计算快一些 |
s********e 发帖数: 893 | |
b******y 发帖数: 9224 | 6
有个办法很快。但是需要存储空间。就是,预先准备好所有10 mile以内的地方。这样
,有人查询的时候,返回结果就行了。不用去真正查询。
也就是类似google的做法,先把所有网页crawl/download下来,处理好后,用户有请求
,直接serve.
这个思路是一个time vs. space的trade off. 经典computer science的问题吧。
【在 s********e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 能否详细说说?谢谢!
|
b******y 发帖数: 9224 | 7
嗯,这个做法我听说过。听一个podcast里介绍,uber的租车服务,也是类似这样的算
法,以计算车子都在哪儿
【在 s****y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 试试这样 : 以搜索点为中心,画一个2R*2R的正方形,然后搜索经纬度在这个正方形内的结果。 : 在这个结果中,再搜索以搜索点为圆心的半径为R的圆形范围,就是最终结果。 : 应该比简单计算快一些
|
L**********1 发帖数: 797 | |