当前位置: 首页 > 知识库问答 >
问题:

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

邹祺然
2023-03-14

我要拿到过去24小时的所有资料。我已经做了一些谷歌搜索,它似乎不容易做与Dynamodb。

我在想,是否可以创建一个二级索引,使用一个公共散列键和一个时间戳字段作为排序键。因此,我可以使用条件timestamp>(datetime.now-24h)查询时间戳。请问这是一个可行的方法还是另有想法?

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

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

共有1个答案

阴雪风
2023-03-14

你带索引的想法一般都是正确的方向。您也是正确的,Dynamo无法通过扫描(在没有索引的情况下,为了获得您想要的项目,扫描是必需的)来对检索到的项目进行排序。

选项依此类推:

>

  • 您可以按照您的建议,创建一个带有分区键(比方说是日期值)和排序键(比方说是时间戳)的GSI--然后通过两个查询,您总是可以获得最近24小时的项目(您还可以在分区键中包含小时值,然后进行24个查询,而不是2个查询)

    另一个可能比GSIs更好的选项是每N小时旋转一次表(其中N可能是12小时、或24小时,或者根据所拥有的数据量有意义的其他值)。这个解决方案为您提供了一个很好的方法来修剪旧的数据,并针对不均匀的访问模式进行优化。较旧的表可能需要很低的写入容量,在某些情况下甚至可以用较低的读取容量来完成。在读写数据时,这种方法确实需要了解多个表,但根据您正在使用的数据量,考虑这种方法确实是有好处的。

  •  类似资料:
    • 我需要一种方法来收集在Oracle DB(Oracle数据库11g)中执行的所有查询在过去的几个小时内,无论查询有多快(这将用于计算sql覆盖率后,对我的应用程序运行测试,其中有几个点执行查询)。 我不能使用像V$SQL这样的表,因为不能保证查询会在那里保持足够长的时间。我似乎可以使用DBA_HIST_SQLTEXT,但是我没有找到过滤掉当前测试运行前执行的查询的方法。 所以我的问题是:我可以使用

    • 问题内容: 我有这个; 但这是行不通的。我想在24小时内向所有新用户展示 问题答案: 您可以使用以下命令在MySQL中完全执行该查询 该表达式返回24小时前的日期。MySql很聪明,可以处理与时间相关的列类型之间的比较。 如果不是与时间相关的类型,而是类似varchar或int列的类型,则必须在该列上使用或调整上面的查询以读取 请参见MySql手册中的DATE_SUB和DATE_ADD。

    • 问题内容: 我在获取24小时制的当前时间时遇到问题。据我所知,“ HH”应代表24小时制的当前小时,但是由于某种原因,“ HH”根本没有被解释。这就是为什么以下代码行输出类似 “ HH:50:06 Uhr,Sep. Sep.”的原因。 : 有什么想法我做错了吗?但是,使用“ hh”有效,这将以12小时制输出时间,这不是我想要的。 帮助表示赞赏! 问题答案: 您可以使用SimpleDateForma

    • 问题内容: 我想要以毫秒为单位的当前时间,然后以12小时格式存储它,但是通过这段代码,我得到了24小时格式时间。 有人可以建议修改以获得期望的结果吗? 问题答案: 更改到作为 请注意-将为您提供 分钟 而不是 月份 。

    • 我仍在努力学习ProMQ。我编写此查询是为了检测在给定名称空间中过去24小时内存在的kubernetes吊舱的数量。 我在这里的过程是: 将度量筛选到相关的名称空间(任何名称空间) 在24小时内获取该指标。 在这里,每个吊舱将有许多相同创建时间的副本 任何一个熟悉普罗米修斯的人能告诉我这个逻辑是否成立吗?因为它不是一个普通的数据库/etc,所以我很难确定如何验证这个查询。它“看起来”似乎在扩展到一

    • 问题内容: 我有这个代码。但是我需要对所有项进行屏幕截图,但是如果我的的项多于屏幕上的可见项,则当这些项大于可见的rect时,不会捕获此代码。 如何正确捕获我的ListView? 我创建的新工作代码 问题答案: 工作代码: