Dynamodb Query / Scan вложенные документы. Указание GSI - PullRequest
0 голосов
/ 04 февраля 2020

У меня следующая структура документа 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. Я хотел бы выполнить следующий запрос: Получить все StudentNames, которые имеют SubjectMarks> 60 Это должно вернуть студента Бена, но только с темой Subject математика Это возможно? Нужно ли использовать запрос или сканирование? Поможет ли это использовать GSI? Как я могу использовать оператор точки в этом случае, поскольку Subjects является списком?

1 Ответ

0 голосов
/ 04 февраля 2020
  1. Да, это ожидаемо, и да, это потому, что у вас есть метка времени в качестве ключа сортировки. Имейте в виду, что ключ раздела не совпадает с первичным ключом. Вы могли бы сказать, что комбинация ключа разделения и ключа сортировки фактически является первичным ключом.
  2. Это немного более сложный вопрос, и есть много способов сделать это sh. В конечном итоге вы не можете использовать сложный / вложенный объект в качестве ключа, то есть вы не можете делать запросы на основе этого. Вы можете фильтровать, но это не то, что вы хотите сделать. Здесь вам, вероятно, нужно сделать шаг назад и лучше понять базы данных No SQL, а также то, как шаблоны доступа действительно являются ключом к моделированию данных. Есть много отличных статей / блогов / видео на эту тему. Одно из моих любимых видео это эта сессия в re: Invent 2018
...