Удаление элемента из списка DynamoDB - PullRequest
1 голос
/ 23 марта 2020

Согласно ссылке ниже в DynamoDB, вы можете удалять элементы, только если вы знаете индекс массива / списка.

Добавить или удалить запись из атрибута Тип списка в элементе таблицы DynamoDB

Что я хотел бы знать, это как предотвратить ошибку индекса вне диапазона.

Или даже хуже ... удаление неправильного элемента из-за изменения номера индекса.

Это может произойти, когда несколько пользователей одновременно запрашивают удаление данных, но их индексный номер изменился во время работы лямбда-функции.

Единственное, о чем я могу думать, это

Запрос на просмотр таблицы, вот номер вызова 1 $$$

Подтвердите, что индекс все еще действителен

Затем внесите изменение по номеру 2 $$$

И это решение только сокращает время между проверкой и обновлением. Это все еще не полное исправление.

Это допустимая ошибка?

1 Ответ

0 голосов
/ 24 марта 2020

Использование REMOVE для удаления по индексу может привести к несоответствиям, как вы упомянули.

Если возможно, лучше использовать тип Set, чтобы вы могли использовать УДАЛИТЬ ключевое слово, где вы можете удалить по значению вместо индекса.

Если это невозможно, вы можете добавить дополнительный уровень защиты, добавив ConditionExpression в UpdateExpression для проверки что состояние списка такое же, как вы ожидаете. Вы можете сделать что-то вроде проверки того, что значение в индексе соответствует ожидаемому значению и / или проверить, что список имеет тот же размер, что и вы.

...