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

Amazon web services Amazon DynamoDB获取过去24小时的所有项目,amazon-web-services,amazon-dynamodb,nosql,Amazon Web Services,Amazon Dynamodb,Nosql,我想得到过去24小时的所有物品。我已经做了一些谷歌搜索,似乎用DynamoDB做起来并不容易 我在想,是否有可能创建一个带有公共哈希键和时间戳字段作为排序键的二级索引。因此,我可以使用条件timestamp>(DateTime.Now-24h)查询时间戳。如果这是一种可能的方式或有其他想法,有人能对此发表评论吗 实际上,我只需要表中不超过24小时的项目。因此,另一个想法是每小时清理一次表,并删除所有超过24小时的项目。这可能吗 编辑:另一个想法是创建一个二级索引,日期作为散列键,时间作为排序键

我想得到过去24小时的所有物品。我已经做了一些谷歌搜索,似乎用DynamoDB做起来并不容易

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

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



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

你关于索引的想法大体上是正确的。同样正确的是,使用Dynamo无法对扫描检索到的项目进行排序(在没有索引的情况下,为了获得所需的项目,需要进行扫描)

以下是选项:

  • 正如您所建议的,您可以使用分区键(比如说日期值)和排序键(即时间戳)创建一个GSI,然后通过两次查询,您可以始终获得最近24小时的项目(分区键中也可以有小时值,然后进行24次查询,而不是2次查询)

  • 另一个可能比GSIs更好的选择是每N小时旋转一次表(其中N可能是12小时,或24小时,或根据您拥有的数据量确定的其他值)。此解决方案为您提供了一种修剪旧数据和优化不均匀访问模式的好方法。旧表可能需要非常低的写入容量,在某些情况下,您甚至可以使用低读取容量。这种方法在读取和写入数据时需要知道多个表,但是根据您正在使用的数据量,它可能是非常有利的。p>

  • 你的第一个建议听起来不错。您认为执行24个“小”查询比执行2个“大”查询更有效吗?考虑到性能,我应该将这些值存储为日期格式为yyyyMMdd和时间格式为HH:ss的字符串,还是存储为数值?第二个选项听起来很有趣,但现在太复杂了。24如果您有足够的配置容量来并行运行查询,那么查询可能会更快,但如果没有配置容量,则不会有太大区别。您在两次查询中失去了我。为什么是2?如果按日期划分,那么根据定义,“最后24小时”将跨越两个日期:当前日期和当前日期-1,因此您需要查询两个分区(只有一个例外,当您在午夜进行查询时,最后24小时的整个时间都将符合当前日期划分)