Как в будущем проверить эти возможные изменения требований (замена столбцов первичного ключа) с помощью дизайна таблицы dynamodb?

#amazon-dynamodb

#amazon-dynamodb

Вопрос:

У меня следующая структура данных

 item_id String
version String
_id     String 
data    String
  

_id это просто UUID для идентификации элемента. Пока нет необходимости искать строку по этому полю.

На данный момент item_id, идентификатор, сгенерированный внешней системой, является первичным ключом. т.Е. Учитывая item_id, я хочу иметь возможность извлекать version _id и data из таблицы dynamodb.

 item_id -> (version, _id, data)
  

Поэтому я устанавливаю item_id в качестве ключа раздела.

У меня есть два вопроса для будущей проверки (эволюции) вышеупомянутой «схемы»:

  1. В будущем, если я захочу включить версию (номер версии элемента) в первичный ключ, могу ли я просто изменить таблицу и добавить ее в качестве ключа раздела?

  2. Если я также хочу сделать данные доступными для поиска _id , возможно ли изменить таблицу, чтобы назначить _id ее ключом раздела (это уникальное значение, потому что это UUID) и переназначить item_id в качестве ключа поиска?

Я хочу избежать создания новой таблицы dynamodb и переноса данных для создания новых ключевых структур, поскольку это может привести к простою.

Ответ №1:

Вы не можете обновить первичные ключи в DynamoDB. Из документов:

Вы не можете использовать updateItem для обновления каких-либо атрибутов первичного ключа. Вместо этого вам нужно будет удалить элемент, а затем использовать PutItem для создания нового элемента с новыми атрибутами.

Если вы хотите сделать данные доступными для поиска по _id , вы могли бы ввести вторичный индекс с _id полем в качестве ключа раздела индекса.

Например, предположим, что ваши данные выглядели так:

введите описание изображения здесь

Если вы определили вторичный индекс _id , индекс будет выглядеть следующим образом (те же данные, что и в предыдущем примере, просто другое логическое представление):

введите описание изображения здесь

В настоящее время DynamoDB не имеет встроенных функций управления версиями, поэтому вам придется включить это в свою модель данных. К счастью, в Интернете много дискуссий об этом варианте использования. У AWS есть документ DynamoDB «Лучшие практики», включая пример управления версиями.

Комментарии:

1. Большое спасибо за очень исчерпывающий ответ!