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

时间:2016-01-22 16:28:41

标签: amazon-dynamodb

在DynamoDB中,我有一个表,其中每个记录都有两个日期属性create_datelast_modified_date。这些日期采用ISO-8601格式,即2016-01-22T16:19:52.464Z

我需要根据create_datelast_modified_date来查询它们,即

  • 获取create_date > [some_date]
  • 所有记录
  • 获取last_modified_date < [some_date]
  • 所有记录
  • 通常会获取[date_attr] [comparison_op] [some_date]等所有记录......

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

然后我将能够通过提供固定的虚拟属性作为分区键,将日期属性作为排序键并使用任何比较运算符<>,{{ 1}},<=,等等。

但这看起来并不好看,而且看起来像是黑客而不是正确的解决方案/设计。有没有更好的解决方案?

1 个答案:

答案 0 :(得分:7)

NoSQL DB有一些不好的东西,但你可以通过以下解决方案来解决这个问题:

解决方案1)将此表数据移动到SQL数据库以进行搜索:这可能很有效,因为您可以根据您的要求进行查询,这可能有时会因为您需要同步而变得乏味不同数据库之间的数据

解决方案2)与Amazon CloudSearch集成:您可以将此表与Cloudsearch集成,然后查询您可以查询Cloudsearch的DynamoDB表

解决方案3)Elasticsearch集成:ElasticSearch与云类似,虽然每个都有一些优点和缺点,最终结果是相同的,而不是查询DynamoDB查询Elasticsearch

解决方案4)正如您在问题中提到的那样添加索引