#amazon-dynamodb #dynamodb-queries
Вопрос:
У меня есть элемент со списком атрибутов, каждый элемент списка-это карта.
"listAttr": [
{"field1":"value1", "field2":"value2", ...}
, {"field1":"value3", "field2":"value4", ...}
....
]
Я хочу выполнить инструкцию REMOVE, которая выглядела бы так:
REMOVE listAttr[x]
С условием, что
listAttr[x].field1 = :val
Я хочу удалить все элементы списка, соответствующие моему состоянию
Я не хочу сначала запрашивать элемент для вычисления идентификаторов, потому что это создаст гонку между вставкой и удалением (идентификатор может выйти из синхронизации к моменту выполнения УДАЛЕНИЯ).
Эквивалентом SQL будет:
DELETE from listAttr where field1=?
Как мне это сделать ?
Ответ №1:
Насколько я понимаю, в DynamoDB это невозможно. Вы можете использовать операцию PUT с оптимистичной блокировкой, чтобы избежать потери обновлений.
Если в элемент часто записываются записи, которые делают эту операцию невыполнимой, вы можете изучить «вертикальное разделение», при котором вы разбиваете один большой элемент на несколько элементов, это позволяет снизить риск возникновения проблем в случае, если приложения изменяют только части элемента за раз, и потенциально снижает затраты на чтение или запись, в случае, если один элемент имеет размер несколько кб, и у вас может быть больше целевых запросов.