获取用户最近城市的最佳方式?Python/Django
我有一个网站,数据库里只有有限的城市数量,现在我需要显示用户当前位置最近的城市。
我可以通过MaxMind的API获取用户的位置,但我想找到数据库中离用户城市最近的城市。
比如说,如果我的数据库里有这些城市:洛杉矶
、旧金山
和纽约市
,而我从另一个城市比如迈阿密
访问网站,那么我应该看到纽约市被选中,因为它在地理上是最近的。
那么,怎样才能快速且高效地做到这一点呢?
2 个回答
0
你可以设置一个机制,每当你往数据库里添加一个城市时,就会自动运行一段代码(在后台),这段代码会计算出每个城市离哪个城市最近。你可以让每个城市通过一个外键指向它最近的城市。
现在你已经把所有的最近城市都计算好了,以后只要有人请求某个城市的名字,你就可以直接在数据库里查找这个城市的名字,然后通过你之前设定的外键找到最近的城市。(城市 ---外键--> 城市)
这样做会非常快,因为你已经提前计算好了最近的城市,能够在每次请求时立刻返回结果。
不过,你打算多久添加一次城市呢?可能不会太频繁。所以,后台的预计算虽然需要花点时间,但其实很少发生。而实时请求的响应速度会非常快。(其他人已经推荐了计算距离的公式,所以我就不再讲这个了!)