Amazon DynamoDB 获取过去 24 小时的所有项目

chr*_*rkl 7 amazon-web-services nosql amazon-dynamodb

我想获取过去 24 小时内的所有项目。我已经进行了一些谷歌搜索,似乎使用 DynamoDB 并不容易。

我在想是否可以创建一个带有公共哈希键和时间戳字段作为排序键的二级索引。因此,我可以使用条件时间戳 > (DateTime.Now - 24h) 查询时间戳。如果这是一种可能的方式或有其他想法,有人可以对此发表评论吗?

实际上,我只需要表中不超过 24 小时的项目。因此,另一个想法是每小时清理一次表并删除所有超过 24 小时的项目。这可能吗?


编辑:另一个想法是创建一个二级索引,以日期作为哈希键,以时间作为排序键,然后执行两个查询。第一个日期=“今天”,第二个日期=“昨天”,条件是时间。但是我如何将日期和时间存储为字符串或整数?这会比我上面的想法更好吗?

Mik*_*scu 3

您对索引的想法通常是正确的。您也是对的,Dynamo 无法对扫描检索到的项目进行排序(在没有索引的情况下需要扫描才能获取所需的项目)。

接下来是选项:

  1. 您可以按照您的建议创建一个带有分区键(例如日期值)和排序键(时间戳)的 GSI - 然后通过两个查询,您始终可以获得最近 24 小时的项目(您可以分区键中还包含每小时值,然后进行 24 次查询,而不是 2 次)

  2. 另一种可能比 GSI 更好的选择是每 N 小时轮换一次表(其中 N 可能是 12 小时、24 小时或根据您拥有的数据量有意义的其他值)。该解决方案为您提供了一种修剪旧数据并优化不均匀访问模式的好方法。较旧的表可能需要非常低的写入容量,在某些情况下,您甚至可能也可以使用较低的读取容量。此方法确实需要在读取和写入数据时了解多个表,但根据您正在使用的数据量,考虑它确实可能是有利的。