我需要能够显示从用户选择的特定地点到n个城镇的距离。这就像点击一张地图,在100英里内得到所有目的地,只是它不是地图,而是网页上的链接。
我需要选择一个解决方案--从一个州扩大到一个国家,到全球范围--这意味着从上千个地点扩大到十万个地点。
我想将CITY1_ID、CITY2_ID和table存储在关系数据库表中,但我怀疑它是否适合web应用程序(百万行)。
是否可以更有效地使用NoSQL数据库或图形数据库?或者RDBMS对于这个问题是否有足够好的设计呢?
补充说:如果我不存储在DB,那么我将如何得到这样的东西:给我在距圣何塞100英里的所有城市?。
发布于 2012-10-02 20:20:09
您应该为每个城市存储一个city_id, latitude, longitude,然后根据运行时输入计算距离。
发布于 2012-10-02 20:54:11
我多次使用的一个简单解决方案(但不是mysql)是创建一个用户定义函数some_distance_function,它包含四个参数latitude1、longitude1、latitude2、longitude2,它返回距离,然后根据该距离函数测试所有内容,查看每个项的距离是否小于或等于给定的值。如果你只有几千个地点,这是相当好和有效的。
如果您需要针对数百万条记录运行此查询,您可能希望看到哪些GIS (地理信息系统)扩展可供您选择的数据库使用,因为有更好的持久数据结构(至少在搜索能力方面)可以通过大量的位置进行搜索。
编辑:要给出微软如何做到这一点的例子,请参阅http://technet.microsoft.com/en-us/library/bb964712(v=sql.105).aspx
看起来MySQL一般支持空间扩展:
http://dev.mysql.com/doc/refman/5.0/en/gis-introduction.html
http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html
编辑二:
看来这个问题也可能有帮助。
发布于 2012-10-06 06:49:26
下面是一个使用RDBMS的解决方案。保留两张桌子
当您需要从给定的纬度和经度找到一定半径内的城市时,您可以对这两个表进行有效的范围查询,从而使城市在一定的纬度和经度范围内。然后,您可以计算出从这样检索到的城市的实际距离。
https://stackoverflow.com/questions/12697635
复制相似问题