gpt4 book ai didi

azure - 有关在 Azure 存储中存储和搜索地理位置数据的问题

转载 作者:行者123 更新时间:2023-12-03 03:20:55 25 4
gpt4 key购买 nike

大家好,我正在建立一个网站,需要能够存储一个人的物理位置,并允许某人搜索该位置一定半径内的其他人。举个例子,让我们假设它是一个约会网站(事实并非如此),因此作为用户,您希望找到当前位置 50 英里范围内满足其他一组搜索条件的人。

目前,我将所有用户信息存储在 Azure 表存储中。然而,这是我第一次尝试创建地理感知搜索算法,因此我想验证我不会浪费时间做一些完全疯狂的事情。为此,我的实现思路如下:

  1. 将用户位置的经度和纬度存储在 Azure 表中
  2. 每个条目的 PartitionKey 是该人居住的州(或国家/地区,如果在美国以外)
  3. 我想使用半正矢方程计算当前用户与所有其他用户之间的距离。我假设我可以将其嵌入到我的 LINQ 查询中?
  4. 最终我希望能够获得半径内所有州/国家的列表,以便我可以根据 PartitionKey 进行优化

自然,这种实现策略会带来一些问题:

  1. 如果我在 LINQ 查询中执行半正矢方程,它会在哪里执行?我最不想要的就是我的 WebRole 从 azure 存储中提取每条记录,以便在应用程序进程中对其运行这个半正矢方程
  2. 使用 Azure 存储执行此操作的想法完全疯狂吗?我知道有像 MongoDB 这样的解决方案能够内置空间搜索查询。我喜欢 Azure 的可扩展性,但我应该研究一些更好的替代方案吗?

感谢您提前提供的帮助!

最佳答案

如果您希望对 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;

这可能并不像您希望的那么聪明。如果这对您不起作用,那么您需要考虑其他选择。 SQL Azure 支持geospatial queries如果您想留在 Microsoft 大家庭。

关于azure - 有关在 Azure 存储中存储和搜索地理位置数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com