在DynamoDB中设置日期比较的索引

时间:2015-09-16 18:20:26

标签: date amazon-dynamodb

如何在DynamoDB表上设置索引以比较日期?即,例如,我在我的表中有一个名为synchronizedAt的列,我希望我的查询获取所有从未同步的行(即0)或在过去2周内未同步,即(new Date()。getTime( )) - (1000 * 60 * 60 * 24 * 7 * 4)

2 个答案:

答案 0 :(得分:1)

这取决于你桌子的其他属性。

如果哈希值集相对较小且稳定,则可以使用哈希和范围主键;在这种情况下,您可以通过将日期放入范围来过滤日期,但无论如何都会通过指定索引来完成查询,因此预查询可能有意义也可能没有意义对于所有的索引值,以执行一个循环,其中询问有趣的范围(每个索引值的循环内部)。

替代方案可以是哈希和范围GSI 。在这种情况下,您可以将固定的哑值作为索引,以便一次查询所有项目的范围。

最后,效率较低的扫描,但是对于大型表格,这将是一个问题(表格越大,扫描完成所需的时间就越多)。

答案 1 :(得分:1)

我有类似的要求来查询日期范围。就我而言,日期范围只是标准。 DynamoDB的问题是您无法使用Just Range键创建索引。它始终需要Hashkey,并且对此类索引的查询始终期望等于Hashkey的条件。

所以我欺骗了数据库。我创建了一个密钥作为世纪,并填充了该日期的世纪年。例如,2019年1月1日,世纪关键值是20。对于2020年1月1日,世纪关键值也是20。非常容易从任何日期得出。然后使用Hashkey作为Century和RangeKey作为日期创建了GSI。查询时,很容易从日期范围导出世纪,并将查询条件Hashkey建立为世纪和日期范围。由于我处理数据的时间不超过5年,因此在接下来的75年中,花招不会失败。 :)

有解决方法不是很好,但是对我来说很好。也许对其他人也有帮助。