gpt4 book ai didi

amazon-web-services - 使用 DynamoDB 的地理空间结构和查询

转载 作者:行者123 更新时间:2023-12-04 13:22:56 24 4
gpt4 key购买 nike

目标是实现高效的地理空间数据结构和查询。更准确地说,“获取给定边界矩形内的所有项目”。边界矩形将使用 longitudeMinlongitudeMaxlatitudeMinlatitudeMax 定义。

所以我想到的 DynamoDB 查询应该是这样的:

KeyConditionExpression: 
itemLongitude BETWEEN :longitudeMin AND :longitudeMax
and
itemLatitude BETWEEN :latitudeMin AND :latitudeMax

..其中 itemLongitudeitemLatitude 将是查询表的排序键。

但是,基于DynamoDB documentation , KeyConditionExpression, 只接受一个排序键。我的理解正确吗?

虽然我知道 Geo Library项目,在深入研究我完全不熟悉的范例之前,我想知道我到底能在多大程度上利用 DynamoDB 的核心功能。

最佳答案

您说得对,DynamoDB 不支持具有多个非 EQ 条件的查询 - 您可以仅查询分区键是否相等,而可以使用 BETWEEN 等运算符比较排序键, < , >等等 所以为了查询让我们说

742 <= x <= 1082
113 <= y <= 305

使用普通复合键,您可以做的最好的事情可能是将数据分组,以最大限度地减少所需的查询数量,但您永远无法用一个单一的找到给定框中的所有点 查询,您还需要进行一些客户端过滤,这会消耗读取容量单位。

作为上述数据的示例,我们可以存储 floor(x / 100) (或者,如果你愿意的话,n 零左填充 x 值的第一位数字)作为散列键,并使用 y 坐标作为排序键。一个点[1033; 278]然后将被编码为

hash   x       y
10 1033 278

然后可以使用以下方式查询上面的示例:

Query (hash = 07, y BETWEEN 113 AND 305) + Filter x >= 742
Query (hash = 08, y BETWEEN 113 AND 305)
Query (hash = 09, y BETWEEN 113 AND 305)
Query (hash = 10, y BETWEEN 113 AND 305) + Filter x <= 1082

虽然这可行,但大盒子需要很多查询。客户还需要过滤结果数据并将其合并到一个数据集中。

更好的方法通常是重组数据。对于地理坐标,常见的解决方案是使用 geo hashes ,这是一种将坐标对编码为一个值的有效方法,因此彼此接近的点可能共享一个公共(public)前缀。然后可以将地理散列作为字符串进行比较,以查找特定区域内的点。

由于 DynamDB Geo library 支持其中大部分内容您已经提到过,我建议使用它来简化地理哈希和其他坐标相关转换的管理。

关于amazon-web-services - 使用 DynamoDB 的地理空间结构和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47036101/

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