0

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

简而言之:我在 DynamoDB 中的表将有 6 个 属性EventNameLocationStartDateEndDate和。Prioritysource

查询将有 4个强制属性 StartDateEndDate和。SourceEvent Name

谢谢您的帮助。

4

1 回答 1

1

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

所以你可以尝试用架构构建一个表:(EventName(hashKey),“StartDate-EndDate”(sortKey),其他属性)

在这种情况下,排序键基本上是开始日期和结束日期的组合,允许您使用 >=(在第一部分)和 <=(在第二部分)...... dynamodb 使用基于 ASCII 的字母顺序......所以假设您的 sortKey 如下所示: "73644-75223" 您可以使用 >= "73000-" AND <= "73000-76000" 来获取给定的事件。

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

希望能帮助到你。

于 2016-01-10T22:28:40.653 回答