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

基于时间戳的DynamoDB查询/排序

司徒云
2023-03-14

在DynamoDB中,我有一个表,其中每条记录都有两个日期属性,create\u date和last\u modified\u date。这些日期采用ISO-8601格式,如2016-01-22T16:19:52.464Z。

我需要有一种基于创建日期和上次修改日期的查询方法,例如。

  • 获取create_date的所有记录

一般来说,我需要获取[date_attr][comparison_op][some_date]的所有记录。

一种方法是在每条记录中插入一个伪固定属性,并创建一个索引,其中伪属性作为分区键,create_date作为排序键(同样对于last_modified_date。)

然后我将能够通过提供固定的虚拟属性作为分区键,日期属性作为排序键并使用任何比较运算符来查询它

但这看起来不太好,看起来像是一种黑客行为,而不是一种合适的解决方案/设计。有没有更好的解决方案?


共有1个答案

闻人宏盛
2023-03-14

NoSQL DBs在某些方面并不擅长,但您可以通过以下解决方案来解决这一问题:

>

  • 将此表数据移动到SQL数据库以进行搜索:这可能很有效,因为您可以根据需要进行查询,有时可能会很繁琐,因为您需要在两个不同的数据库之间同步数据

    与Amazon CloudSearch集成:您可以将此表与CloudSearch集成,然后可以查询CloudSearch,而不是查询DynamoDB表

    与Elasticsearch集成:Elasticsearch类似于CloudSearch,虽然各有优缺点,但最终结果是相同的——而不是查询DynamoDB,而是查询Elasticsearch

    正如您在问题中提到的,添加GSI索引

  •  类似资料:
    • 我有一个dynamodb表,它有一个分区键和排序键。我需要根据列查询表以查找最近的100行。当我检查API时,我必须指定。在这种情况下,我不想查询分区键。我该怎么做? 操作似乎不支持对结果进行排序。 我能想到的一个解决方案是在表中添加一个属性,比如说,并为表中的每一行指定相同的值。然后在表上创建一个GSI,分区键为,时间戳为排序键。然后我可以查询分区键等于的表,并根据对结果进行排序。然而,这个解决

    • 我有一个dynamodb表,其结构如下 我想在此表上执行两个主要查询。 获取用户的所有条目- 还有其他建议吗?谢谢你。 2014年5月更新这里发布了一些很好的建议。我仍在尝试如何最好地实现这一点,并希望检查以下方法的优缺点。 我担心这可能会造成很多不一致,好像对usertrips或recenttrips的插入失败了等等。

    • 在我的DynamoDB表中,有HashKey=ID和GSI=Type。我需要获取特定类型(GSI)的所有hashKeys(ID)。 在这种情况下,获取给定类型的所有ID的有效方法是什么?我的DynamoDB表不会很大。

    • 现在,如果我只希望得到时间戳和sensorId,那么我阅读了投影表达式,并尝试执行一个查询(query.json): aws cli命令 给了我:

    • 问题内容: 我在SQL中有两个表,并且我需要能够基于早于或等于表A中的时间戳的表B中的时间戳进行联接。 因此,这是两个表和所需输出的一些虚假数据: 结案案例(表A) 分类(表B) 所需结果 因此,我知道代码需要如下所示,我只是想不出该如何处理部分($ 1和$ 2是将要传入的变量): 我知道我可以使用子选择,但这将在至少几千行,甚至可能更多的行上进行,我需要它真的要快。所以我希望有一个简单的子句可以

    • 我想查询cassandra timestamp列,例如this hour、last hour、beather。 我在mysql中执行了与昨天数据相同的查询