1

我有以下 DynamoDb 文档的结构

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

 "studendId":  123,

 "UpdatedTimestamp"(SortKey): 1221432432

 "Subjects": [

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

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

}

我目前正在使用 Dynamodb Mapper 来保存文档。

我有以下问题

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

  2. 我想执行以下查询:获取所有具有 SubjectMarks > 60 的 StudentNames 这应该返回学生 Ben,但只有 Subject Math。这可能吗?我需要使用查询还是扫描?使用 GSI 会有帮助吗?在这种情况下,我如何使用点运算符,因为主题是一个列表?

4

1 回答 1

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