Amazon dynamodb cloudsearch日期的范围查询

Amazon dynamodb cloudsearch日期的范围查询,amazon-dynamodb,aws-sdk,amazon-cloudsearch,Amazon Dynamodb,Aws Sdk,Amazon Cloudsearch,我有一个dynamodb表,它以字符串格式存储创建日期历元。此日期既不是哈希键也不是排序键。最终目标是查询某个范围的创建日期,即我需要给定时间范围内的所有ID 表架构为: id、版本、创建日期、信息 id是散列键,版本是排序键 我正在考虑创建一个cloudsearch域并将其链接到dynamodb表。如果日期为字符串格式,是否可以使用java在cloudsearch中使用范围查询?如果是,如何实现?以下是如何在DynamoDB中使用哈希键为creation\u y\u m的GSI和范围键为cre

我有一个dynamodb表,它以字符串格式存储创建日期历元。此日期既不是哈希键也不是排序键。最终目标是查询某个范围的创建日期,即我需要给定时间范围内的所有ID

表架构为: id、版本、创建日期、信息

id是散列键,版本是排序键


我正在考虑创建一个cloudsearch域并将其链接到dynamodb表。如果日期为字符串格式,是否可以使用java在cloudsearch中使用范围查询?如果是,如何实现?

以下是如何在DynamoDB中使用哈希键为
creation\u y\u m
的GSI和范围键为
creation\u date
的GSI来实现这一点

当您查询一系列的创建日期时,您需要进行一些日期操作,以找出两个日期之间的所有月份,但随后您可以使用类似于此的关键条件表达式查询GSI

creation_y_m = 2019-02 AND creation_date BETWEEN 2019-02-05T12:00.00Z AND 2019-02-18T06:00:00Z
考虑到大多数查询都是两周的范围,通常只需进行一到两次查询即可获得所有项目

您可能需要回填
creation_y_m
字段,但通过扫描表并更新每个项以具有新属性,这样做相当简单


当然,这方面有很多变化。您可以调整散列键的粒度(也许您只想要年,也许您想要年-月-日)。您可以使用epoch-time而不是ISO 8601字符串。

以下是如何在DynamoDB中使用哈希键为
creation\u y\u m
的GSI和范围键为
creation\u date
的GSI来实现这一点

当您查询一系列的创建日期时,您需要进行一些日期操作,以找出两个日期之间的所有月份,但随后您可以使用类似于此的关键条件表达式查询GSI

creation_y_m = 2019-02 AND creation_date BETWEEN 2019-02-05T12:00.00Z AND 2019-02-18T06:00:00Z
考虑到大多数查询都是两周的范围,通常只需进行一到两次查询即可获得所有项目

您可能需要回填
creation_y_m
字段,但通过扫描表并更新每个项以具有新属性,这样做相当简单


当然,这方面有很多变化。您可以调整散列键的粒度(也许您只想要年,也许您想要年-月-日)。您可以使用epoch-time而不是ISO 8601字符串。

在生产中使用了DynamoDB和CloudSearch,如果您只需要一个查询,我建议您只使用DynamoDB。您可以使用一个GSI来完成它,这将比使用CloudSearch简单得多,而且可能更具成本效益。如果您愿意,您可以提供有关表的更多信息,我可以给出更详细的解释。使用模式更新问题。我无法创建创建日期为哈希键的gsi,因为它不允许按范围查询。查询时,我没有id。这就是为什么我无法创建id为哈希键、创建日期为排序键的gsi。这仍然是可能的。您要查询的时间范围的典型大小是多少?您创建项目的速率是多少?时间范围约为2周。通常在一小时内创建大约300个条目。但这可能会有所不同。在生产中使用了DynamoDB和CloudSearch之后,如果您只需要一个查询,我建议您只使用DynamoDB。您可以使用一个GSI来完成它,这将比使用CloudSearch简单得多,而且可能更具成本效益。如果您愿意,您可以提供有关表的更多信息,我可以给出更详细的解释。使用模式更新问题。我无法创建创建日期为哈希键的gsi,因为它不允许按范围查询。查询时,我没有id。这就是为什么我无法创建id为哈希键、创建日期为排序键的gsi。这仍然是可能的。您要查询的时间范围的典型大小是多少?您创建项目的速率是多少?时间范围约为2周。通常在一小时内创建大约300个条目。但这可能有所不同。