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

#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 с оптимистичной блокировкой, чтобы избежать потери обновлений.

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