DynamodB удаляет конкретный элемент из списка без коллизий - PullRequest
0 голосов
/ 04 декабря 2018

Я использую DynamodB с API Python, и у меня есть атрибут списка, список содержит сложные данные в нем.

Я хотел бы иметь возможность удалить конкретный предмет.

Я нашел этот учебник, объясняющий, как удалить элемент из списка по его индексу.

И нашел этот ТАК вопрос относительно ситуации.

Как в учебном пособии, так и в вопросе SO показано, как удалить элемент из списка по его индексу, у меня есть более конкретная ситуация, когда два пользователя могут использовать одну и ту же таблицу DynamodB одновременно, и оба они могутпытаясь удалить один и тот же элемент, при использовании индекса это может вызвать следующую ситуацию: имея список [1,2,3], два пользователя хотят удалить элемент «1» и используя список удаления [0],первый пользователь удаляет элемент 1, но теперь список равен [2,3], а второй пользователь удаляет элемент «2».

Я обнаружил, что вы можете удалить конкретный элемент по его значению при использовании типа данных набора DynamodB, но нет набора, который может содержать сложные данные, только двоичные данные, число и номер, и мне нужно хранить что-то, чтобольше похоже на: {"att1": [1,2,3], "att2": str, "attr3": {...}} и вложенные.

Как я могу удалить элемент без риска удаления другого элемента по индексу, если кто-то уже удалил его до того, как я заставил меня удалить не тот элемент?

1 Ответ

0 голосов
/ 04 декабря 2018

Я точно не помню, DynamoDB может вернуть хеш существующей записи.

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

aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"myHash":{"N":"125948abcdef1234"}}' \ --update-expression

Идея в том, что если объект уже был кем-то обновлен, хэш также должен быть другим

...