【问题标题】:Range query on cloudsearch datecloudsearch日期范围查询
【发布时间】:2019-02-26 02:48:56
【问题描述】:

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

表架构是: ID、版本、创建日期、信息。

id 是哈希键,版本是排序键。

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

【问题讨论】:

  • 在生产环境中使用过 DynamoDB 和 CloudSearch,如果您只需要一个查询,我建议您只使用 DynamoDB。您可以使用单个 GSI 来完成它,这将比使用 CloudSearch 更简单并且可能更具成本效益。如果你愿意,你可以提供一些关于你的桌子的更多信息,我可以给出更详细的解释。
  • 用架构更新了问题。我无法使用 creation_date 作为哈希键创建 gsi,因为它不允许按范围查询。查询时我没有 id。这就是为什么我不能创建一个 id 作为哈希键和 creation_date 作为排序键的 gsi。
  • 还是可以的。您将查询的时间范围的典型大小是多少?您的项目创建率是多少?
  • 时间范围约为 2 周。通常在一小时内创建大约 300 个条目。但这可能会有所不同。

标签: amazon-dynamodb aws-sdk amazon-cloudsearch


【解决方案1】:

您可以在 DynamoDB 中使用散列键为 creation_y_m 和 GSI 范围键为 creation_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 字段,但通过扫描您的表并更新每个项目以具有新属性来做到这一点相当简单。

当然,这有很多变化。您可以调整哈希键的粒度(也许您只想要年,也许您想要年月日)。您可以使用纪元时间而不是 ISO 8601 字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2019-08-16
    • 2014-12-17
    • 2014-01-07
    相关资源
    最近更新 更多