SQL Server - 使用空间数据

rom*_*man 6 sql-server-2008 sql-server sql-server-2008-r2 spatial

我将 SQL Server 2008 R2 用于实时位置感知服务。该服务主要从用户接收位置数据(纬度/经度)并返回用户周围的位置。

每个用户每秒发送一次数据。对于报告的每个位置,都有一个查询来检查该用户周围的其他用户并返回有关他们的数据。

我使用 Lat/Lon 作为浮点字段并运行标量函数来查找最近的用户。

我想这种方法不是最好的。我知道 SQL Server 中有空间数据结构,但不知道它们是否好。我应该使用它们吗?如果是这样,最好的方法是什么?

我应该采取什么方法来使此操作尽可能快速和可扩展?

也许 NoSQL 更适合空间数据?

PS - 我说的是在任何给定时间都有成千上万的用户。

Rob*_*ley 5

是的,您应该使用空间索引,但您还应该考虑简单的控制性问题可以解决的限制。

空间索引适合查找特定区域中的位置。不利于计算哪个距离最短。

所以......当尝试找到最近的项目时,请从较小的距离开始并找到该区域中的项目。就像是:

select id
from dbo.locations
where location.STIntersects(@point.STBuffer(@somedistance)) = 1;
Run Code Online (Sandbox Code Playgroud)

...并慢慢增加@somedistance的值,直到找到你要找的东西。这将允许完成搜索,快速消除不感兴趣的位置。