【问题标题】:Whats the best way to query DynamoDB based on date range?根据日期范围查询 DynamoDB 的最佳方法是什么?
【发布时间】:2016-01-07 17:35:50
【问题描述】:

作为从 SQL 迁移到 DynamoDB 的一部分,我正在尝试创建一个 DynamoDB 表。 UI 允许用户根据开始日期、结束日期、事件名称和事件来源 4 个属性进行搜索。 该表有 6 个属性,以上四个是它的子集,其他属性是优先级和位置。如上所述的查询使得必须根据上述四个值进行搜索。什么是在 DynamoDB 中存储信息的最佳方式,这将帮助我相当容易地根据开始日期和结束日期进行查询。 我想创建一个 GSI,hashkey 作为 startdate,rangekey 作为 end date,GSI 作为其余两个属性?

简而言之: 我在 DynamoDB 中的表将有 6 个属性 EventNameLocationStartDateEndDatePrioritysource

查询将有 4 个强制属性 StartDateEndDateSourceEvent Name

感谢您的帮助。

【问题讨论】:

    标签: amazon-dynamodb dynamo-local database nosql


    【解决方案1】:

    您可以在查询中使用大于/小于比较运算符http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html

    因此您可以尝试使用架构构建表: (EventName(hashKey)、“StartDate-EndDate”(sortKey)、其他属性)

    在这种情况下,排序键基本上是开始日期和结束日期的组合,允许您使用 >=(在第一部分)和 =“73000-”和

    此外,您可以在表上为需要通过查询读取的每个剩余属性创建一个 GSI。然后,您可以将数据投影到要通过查询获取的索引中。与 LSI 相比,来自 GSI 的查询不会获取未投影的属性。请注意使用 GSI(和 LSI)所涉及的额外成本(读/写)...以及数据投影所需的额外内存...

    希望对你有帮助。

    【讨论】:

    • 您能否解释或举例说明如何比较,以便现在时间戳位于开始日期和结束日期之间:当开始日期和结束日期在 sortkey 中时例如:开始日期 7 月 20 日和结束日期 7 月 31 日的排序键值 1562716800000-1563667199000。如何比较今天是否与此排序键匹配。
    • qq:在你的例子中,我不明白为什么 73644-75223 会是 73000-76000。你能再解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2021-09-03
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多