#json #amazon-web-services #amazon-dynamodb
#json #amazon-веб-сервисы #amazon-dynamodb
Вопрос:
Я пытаюсь понять, как таблицы DynamoDB работают с GSI, и я очень смущен их документацией.
По этой ссылке таблица музыкальной библиотеки выглядит следующим образом в формате, подобном JSON (если я правильно понимаю):
// Music Library Table
[
{
"song_id": "song-129", // Partition Key
"details": { /** details is a Sort Key */
"title": "Wild Love",
"artist": "Argyboots",
"downloads": 15000,
// etc.
},
"month-2018-01": { /** Also a Sort Key? */
"month": "2018-01", /** GSI Primary Key */
"month_total": 1000 /** GSI Secondary Key */
},
"download_id_1": { /** Also a Sort Key? */
"time": "timestamp"
},
"download_id_2": { /** Also a Sort Key? */
"time": "timestamp"
},
"download_id_3": { /** Also a Sort Key? */
"time": "timestamp"
},
}
]
Похоже, что существует несколько комбинаций Primary Keys = (Partition Key Details / Month / DownloadID)
. Но они написали
и ключ сортировки=идентификатор загрузки
Также по этой ссылке таблица HR выглядит следующим образом:
// HR Table
[
{
"employee_id": "hr-974", /** Partition Key */
"employee_name": { /** Also a Sort Key? */
"name": "Murphy, John",
"start_date": "2008-11-08",
// etc.
},
"YYY-Q1": { /** Also a Sort Key? */
"order_total": "$5,000",
"name": "Murphy, John"
},
// ...
"v0_job_title": { /** Also a Sort Key? */
"job_title": "operator-1",
"start_date": "2008-11-08",
// etc.
},
"v1_job_title": { /** Also a Sort Key? */
"job_title": "operator-2",
"start_date": "2008-11-10",
// etc.
}
}
]
Но похоже, что это не так, потому что:
Используйте глобальный вторичный индекс, чтобы найти всех сотрудников, работающих на определенном складе, путем поиска по идентификатору склада (например, Warehouse_01).
Похоже, что на складах есть свои собственные записи со своими идентификаторами.
Итак, как должны выглядеть таблицы в формате JSON?
Ответ №1:
Эта диаграмма немного сбивает с толку, но «подробности», «месяц-2018-01» и т.д. — это не все отдельные ключи сортировки. На самом деле все они находятся под одним «ключом сортировки», точно так же, как «Song-129» по-своему не является ключом раздела, он находится под ключом раздела «song_ID».
Чтобы было понятнее, вот как это выглядело бы в формате JSON:
// Music Library Table (if this is a list containing all individual items in the table)
[
{
"song_id": "song-129", // Partition Key
"sort_key": "details", // Sort Key
"title": "Wild Love",
"artist": "Argyboots",
"downloads": 15000,
// etc.
},
{
"song_id": "song-129", // Partition Key
"sort_key": "month-2018-01", // Sort Key
"month": "2018-01", // GSI Partition Key
"month_total": "1000" // GSI Sort Key
},
{
"song_id": "song-129", // Partition Key
"sort_key": "download_id_1", // Sort Key
"time": "timestamp"
},
{
"song_id": "song-129", // Partition Key
"sort_key": "download_id_2", // Sort Key
"time": "timestamp"
},
{
"song_id": "song-129", // Partition Key
"sort_key": "download_id_3", // Sort Key
"time": "timestamp"
},
]
Комментарии:
1. То есть нормально, если ключи раздела одинаковы для всех элементов, если ключи сортировки разные?
2. Да, именно так, это основное использование ключа сортировки для «сортировки» различных данных вашего ключа раздела