扫描表或创建一个哈希键是否更好?

时间:2015-02-18 03:42:56

标签: ios swift amazon-web-services amazon-dynamodb

我正在使用Swift开发iOS应用,我需要能够根据它们与某个位置的接近程度来获取帖子,并根据它们发布的时间对它们进行排序。

我知道如何检查一个项目的位置与另一个位置的接近程度,但是,我的问题是我需要在用户的x英里范围内获取所有帖子。

根据我的理解,scan表是否会更好地从数据库中选择每个值,然后检查返回的每个项是否在用户的x英里范围内?这似乎是资源密集型的,因为我期待有很多帖子。

或者,最好是创建另一个具有静态哈希键的表,并设置两个本地二级索引,一个用于纬度,一个用于经度,并且只查询该一个静态哈希键,并查询纬度在x和y之间,经度在a和b之间?

AWS DynamoDB documentation警告不要使用太多访问的哈希键:

但它是否真的一样糟糕,因为它们似乎使用相同的哈希键?

这将在一个表中,其中包含静态哈希键的以下值,其中Post ID是实际帖子的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** 

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

1 个答案:

答案 0 :(得分:1)

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

在扫描方法的基础上,您可以推理在lat / lang属性上使用全局二级索引。

相关问题