Таблицы AWS DynamoDB и GSI

#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. Да, именно так, это основное использование ключа сортировки для «сортировки» различных данных вашего ключа раздела