根据时间戳查询/排序的DynamoDB操作

11
在 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] 的所有记录。
其中一种实现方式是在每个记录中插入一个虚拟的固定属性,并创建一个索引,在该索引上将虚拟属性作为分区键,将 create_date 作为排序键(对于 last_modified_date 同理)。
然后,我可以通过指定固定虚拟属性作为分区键、日期属性作为排序键,并使用任何比较操作符,例如 <><=>= 等来进行查询。
但是,这似乎并不好,看起来更像是一个 hack 而不是一个合适的解决方案/设计。是否有更好的解决方案呢?

2
这是相关的:https://dev59.com/xGUq5IYBdhLWcg3wC8Hx#38790120 - Ryan Shillington
1个回答

11

NoSQL数据库有其不足之处,但您可以通过以下解决方案来解决:

  1. 将此表数据移至SQL数据库以进行搜索:这可能非常有效,因为您可以根据要求查询,但有时可能会很繁琐,因为需要在两个不同的数据库之间同步数据。

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

  3. Elasticsearch 集成:Elasticsearch类似于CloudSearch,尽管各自都有优缺点,但最终结果相同 - 不必查询 DynamoDB,而是查询 Elasticsearch。

  4. 如您在问题中所述,添加GSI索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接