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

Shi*_*hti 4 amazon-dynamodb

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

我需要有一种基于create_datelast_modified_dateie 查询它们的方法

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

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

然后,我就可以通过提供固定的虚拟属性作为分区键查询它是这样,日期属性作为排序键,使用任何比较操作符<,>,<=,>=,等等.

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

Har*_*ara 7

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

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

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

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

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