【问题标题】:Query for a time range from startTime and endTime fields in DynamoDB?从 DynamoDB 中的 startTime 和 endTime 字段查询时间范围?
【发布时间】:2017-09-06 14:00:24
【问题描述】:

我有一个包含以下字段的表:

uniqueID
startTime
endTime
value
otherData

给定今天上午 10:00 和今天上午 11:00 的时间范围,我想检索 startTimeendTime 位于上述时间范围之间的所有项目。有没有办法有效地做到这一点?

我能想到一个平庸的解决方案:

  1. 使用基于一天中的小时的哈希键创建 GSI 以进行均匀分区,并将 startTime 设置为范围键。
  2. 这样我可以查询startTime 条件为startTime >= 今天上午10:00。然后我必须为endTime

在 DynamoDB 中有更好的方法吗?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb nosql


    【解决方案1】:

    3 种方法:

    1) 您的 GSI 方法
    2)扫描:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan.Scan
    如果您没有大量数据,可能对您有用
    3) 将 startTime 设置为表的范围键并对其进行查询(没有 GSI)

    如果使用 GSI,请记住它们最终是一致的(即,在您立即更新查询后,您可能无法在查询中获得记录)

    【讨论】:

    • 2) 扫描不好,因为数据太多。 3) uniqueID 与 startTime 没有关联,我不明白这是如何工作的?如果我想对范围键进行查询,我还需要提供一个散列键,在本例中为 uniqueID。这是你的意思吗?
    • uniqueID 是 hashKey,startTime 是 rangeKey。
    • 那仍然意味着我需要按 endTime 过滤,对吧?这意味着它与 GSI 解决方案相同。实际上,GSI 解决方案更有意义,因为我将使用 GSI 哈希键将数据分区到每小时存储桶中。
    • 是的。您仍然需要检查结束时间。答案的重点是向您展示如何做到这一点。在 95% 的情况下,GSI 可能是正确的方法
    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 2018-11-02
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多