扫描 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 属性上使用全局二级索引。
我正在开发 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 属性上使用全局二级索引。