【发布时间】:2013-11-15 11:50:52
【问题描述】:
我正在思考如何有效地表示数据库中的位置,以便在给定任意新位置的情况下,我可以有效地在数据库中查询与对象的可接受接近度阈值内的候选位置。
之前有人问过类似的问题,但我没有找到基于我对问题域的标准的讨论。
注意事项:
- 从头开始,我可以用任何方式表示数据(例如 long&lat 等)
- 任何结果集都是时间敏感的,因为它会在很短的时间窗口(~5-15 分钟)内失去有效性,所以我不能无限期地缓存
- 我可以容忍结果中有一些合理的误差范围,例如,如果某个位置稍微超出阈值,或者如果结果集中的一行最近过期
- 语言无关的讨论是完美的,但如果它有助于我使用 C# MVC 3 和 SQL Server 2012
几个初步想法:
- 使用像 Google 这样的外部 API,但是这会产生数千个请求并且延迟会很短
- 使用 Haversine 函数,但是这看起来很昂贵,因此应该在最少数量的候选者上执行(甚至可能作为存储过程!)
- 构建邮政编码/邮政编码图表,这样我就可以从任何节点找到与其相邻的邮政编码/邮政编码,但这可能涉及大量数据存储
一些快速减少可能候选的优化思路:
- 缓存搜索结果集,当我们进行后续搜索时,查看主题是否在我们已经为其缓存结果集的候选者的可接受范围内。如果是这样,请使用缓存的结果集(但请记住,结果很快就会过期)
我希望答案不仅仅是原始 CPU 能力,还有一些我没有想到的方法可以帮助我?
谢谢
ps。抱歉,如果我错过了以前提出的问题并提供了有用的答案,请在下方告诉我。
【问题讨论】:
-
有趣的链接,今晚我一定会调查的。谢谢。附言。如果它被证明是一个解决方案,您的评论可能应该是一个答案
标签: algorithm data-structures location