Dynamodb查询/扫描嵌套文档。指定GSI

时间:2020-02-03 22:08:00

标签: amazon-dynamodb dynamodb-queries amazon-dynamodb-index

我具有DynamoDb文档的以下结构

{
 "studentName"(PK): "Ben",

 "studendId":  123,

 "UpdatedTimestamp"(SortKey): 1221432432

 "Subjects": [

      {
       SubjectName:  "Math"
       SubjectMarks:  80
       UpdatedTimeStamp:  234324324

     },
     {
     SubjectName: "History"
     SubjectMarks: 30
     UpdatedTimeStamp: 213234234
     }
]

}

我目前正在使用Dynamodb映射器保存文档。

我有以下问题

  1. 每次更新表时,它都会在DynamoDb表中创建新记录吗?这是预期的吗?查询时,我必须每次将Limit设置为1才能获取最新记录。是因为我将SortKey设为当前时间戳?如果删除sortKey会有所帮助吗?

  2. 我想执行以下查询: 获取所有SubjectMark> 60的学生姓名 这应返回学生Ben,但仅包含主题数学。这可能吗?我需要使用查询还是扫描?使用GSI是否有帮助?因为主题是列表,在这种情况下如何使用点运算符?

1 个答案:

答案 0 :(得分:0)

  1. 是的,这是预料之中的,是的,因为您将时间戳记作为排序键。请记住,分区键与主键不同。您可以说分区键和排序键的组合实际上是主键。
  2. 这是一个更复杂的问题,有很多方法可以解决。最终,您不能将复杂/嵌套的对象用作键,这意味着您无法基于该对象进行查询。您可以过滤,但这并不是您真正想要做的。您可能需要在这里做的是退后一步,以更好地了解NoSQL数据库以及访问模式如何真正成为数据建模的关键。关于这个主题有很多很棒的论文/博客/视频。我最喜欢的视频之一是this session at re:Invent 2018