嘿大家我正在建立一个网站,需要能够存储一个人的物理位置,并允许某人在该位置的某个半径范围内搜索其他人。为了举个例子,我们假装它是一个约会网站(它不是),所以作为一个用户,你想要找到距你当前位置50英里的人,以满足其他一些搜索标准。
目前,我将所有用户信息存储在Azure Table Storage中。然而,这是我第一次尝试创建地理感知搜索算法,所以我想验证我不会浪费时间做一些完全疯狂的事情。为此,我的实施想法如下:
这种实施策略自然会引出一些问题:
提前感谢您的帮助!
答案 0 :(得分:1)
如果希望查询对Azure表快速,则必须针对分区键和行键运行查询。此外,如果您使用LINQ查询Azure表,则需要注意您使用的功能。如果可以为所有行计算一次值,LINQ将是聪明的并在将查询发送到AZT之前对其进行评估,但是如果需要针对每一行评估它,那么您只能使用那些Azure支持的那些(这是一个很短的名单)。
如果您想使用区域的边界方块而不是边界圆,则可以使此工作正常。将纬度存储在PartitionKey
中的RowKey
和经度中,并使用如下所示的查询:
var query = from UserLocation ul
in repository.All()
where
ul.PartitionKey.CompareTo(minimumLatitude) > 0
&& ul.PartitionKey.CompareTo(maximumLatitude) < 0
&& ul.RowKey.CompareTo(minimumLongitude) > 0
&& ul.RowKey.CompareTo(maximumLongitude) < 0
select
ul;
这可能不像你希望的那样聪明。如果这对您不起作用,那么您需要查看其他选项。如果您希望保留在Microsoft系列中,SQL Azure支持geospatial queries。
答案 1 :(得分:0)
在SQL Azure中使用空间查询(大约500万条记录)后,我可以确认它非常快 - 可能值得一看。