扫描 table 还是只创建一个散列键更好?

Is it better to scan a table, or to create just one hash key?

我正在开发 iOS 应用程序,使用 Swift,我需要能够根据 post 与特定位置的接近程度获取它们,并且根据 posted.

的时间对它们进行排序

我知道如何检查一个项目的 post 位置与另一个位置的距离有多近,但是,我的问题是我需要在用户 x 英里范围内获取所有 posts .

scan table 会更好吗?据我所知,它从数据库中选择每个值,然后检查返回的每个项目是否在用户的 x 英里范围内?这似乎是资源密集型的,因为我预计会有很多 posts.

或者,创建另一个具有静态哈希键的 table 并设置两个本地二级索引,一个用于纬度,一个用于经度,然后只查询那个会更好吗static hash key,查询纬度在x和y之间,经度在a和b之间?

AWS DynamoDB documentation 警告不要使用访问过多的散列键:

但是使用相同的散列键真的像他们说的那么糟糕吗?

这将在 table 中,具有以下静态哈希键值,其中 Post ID 是实际 post.

的 ID
**static hash key** | **latitude (local secondary index)** | **longitude (local secondary index)** | **dateCreated (local secondary index) | **Post ID**

对于扫描选项:

**ID** | **latitude ** | **longitude ** | **date created ** | **poster** | **comments** | **flags** | **upvotes** | **downvotes** | **popularity** 

使用静态密钥会比扫描 table 性能更好吗?成本方面怎么样?

遵循指南。由于哈希值错误,我们在生产中遇到了两个问题。所以我对你的建议是放弃静态散列概念。它不会以合理的价格扩展,并且会很难监控。

在扫描方法之上构建,您可以推断在 lat/lang 属性上使用全局二级索引。