DynamoDB根据时间戳查询/排序
DynamoDB根据时间戳查询/排序
在DynamoDB中,我有一张表,每条记录都有两个日期属性,create_date
和last_modified_date
。这些日期是按照ISO-8601格式的,例如2016-01-22T16:19:52.464Z
。\n我需要一种根据create_date
和last_modified_date
进行查询的方法,例如:\n
- \n
- 获取所有
create_date > [some_date]
的记录 - 获取所有
last_modified_date < [some_date]
的记录
\n
\n
\n总体上,我需要获取所有满足[date_attr] [comparison_op] [some_date]
条件的记录。\n一种做法是在每条记录中插入一个固定的虚拟属性,并创建一个索引,将虚拟属性作为分区键,将create_date
作为排序键(对于last_modified_date
也是如此)。\n然后,我可以通过提供固定的虚拟属性作为分区键,将日期属性作为排序键,并使用任何比较运算符<
、>
、<=
、>=
等进行查询。\n但是这似乎不太好,看起来更像是一个妥协而不是一个恰当的解决方案/设计。是否有更好的解决方案?
问题的出现原因:DynamoDB在基于时间戳进行查询和排序方面存在一些局限性。
解决方法:
1. 将表数据移动到SQL数据库以便进行搜索。这可以解决问题,因为您可以根据需求进行查询,但有时可能会比较繁琐,因为需要在两个不同的数据库之间同步数据。
2. 与Amazon CloudSearch集成:可以将此表与CloudSearch集成,然后不再查询DynamoDB表,而是查询CloudSearch。
3. 与Elasticsearch集成:Elasticsearch类似于CloudSearch,尽管各有优缺点,但最终的结果都是相同的——不再查询DynamoDB,而是查询Elasticsearch。
4. 如您在问题中提到的,添加GSI索引。