#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
в качестве ключа раздела.
У меня есть два вопроса для будущей проверки (эволюции) вышеупомянутой «схемы»:
-
В будущем, если я захочу включить версию (номер версии элемента) в первичный ключ, могу ли я просто изменить таблицу и добавить ее в качестве ключа раздела?
-
Если я также хочу сделать данные доступными для поиска
_id
, возможно ли изменить таблицу, чтобы назначить_id
ее ключом раздела (это уникальное значение, потому что это UUID) и переназначитьitem_id
в качестве ключа поиска?
Я хочу избежать создания новой таблицы dynamodb и переноса данных для создания новых ключевых структур, поскольку это может привести к простою.
Ответ №1:
Вы не можете обновить первичные ключи в DynamoDB. Из документов:
Вы не можете использовать updateItem для обновления каких-либо атрибутов первичного ключа. Вместо этого вам нужно будет удалить элемент, а затем использовать PutItem для создания нового элемента с новыми атрибутами.
Если вы хотите сделать данные доступными для поиска по _id
, вы могли бы ввести вторичный индекс с _id
полем в качестве ключа раздела индекса.
Например, предположим, что ваши данные выглядели так:
Если вы определили вторичный индекс _id
, индекс будет выглядеть следующим образом (те же данные, что и в предыдущем примере, просто другое логическое представление):
В настоящее время DynamoDB не имеет встроенных функций управления версиями, поэтому вам придется включить это в свою модель данных. К счастью, в Интернете много дискуссий об этом варианте использования. У AWS есть документ DynamoDB «Лучшие практики», включая пример управления версиями.
Комментарии:
1. Большое спасибо за очень исчерпывающий ответ!