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