DynamoDB - самый эффективный способ удаления раздела? - PullRequest
0 голосов
/ 24 мая 2019

Допустим, у меня есть ключ раздела User:user@email.com, и он имеет несколько ключей сортировки, таких как Data, Sale:001, Contact:001.

Теперь, что если я хочу удалитьэтот пользователь?

Я думал о двух возможных способах использования API.

1 - Сканирование

Сначала выполните SCAN, где partition-key=User:user@email, получите результаты и выполните пакетное удаление для каждого возвращенного элемента с соответствующим ключом сортировки.

2 - Запрос

Для этого мне сначала нужно изменитьвсе ключи сортировки имеют общий префикс, например, User|Data, User|Sale:001, User|Contact:001, а затем выполните запрос, где

partition-key=User:user@email.com and sort_key.begins_with(User)

после получения результатов, я бы тогда просто сделал пакетное удалениекак опция сканирования.


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

Потому что если это разумно, то я думаю, что это будет стоить столько же, сколько опция запроса, без добавления префикса к моим ключам сортировки.

1 Ответ

1 голос
/ 24 мая 2019

Scan () не поддерживает partition-key=User:user@email за исключением выражения фильтра.

Так что да, вся таблица будет прочитана. На самом деле будут возвращены только те записи, которые соответствуют.

Query (), с другой стороны, требует partition-key=user:user@email в качестве ключевого выражения условия. Вам не нужно вносить какие-либо изменения в ваш дизайн ключа сортировки; в качестве условия ключа для ключа сортировки необязательно .

Требуется проверка на равенство ключей раздела, которая должна быть указана в следующий формат:

partitionKeyName =: partitionkeyval

Если вы также хотите указать условие для ключа сортировки, оно должно быть в сочетании с использованием AND с условием для ключа сортировки. Следующий Например, используя оператор сравнения = для ключа сортировки:

partitionKeyName =: partitionkeyval AND sortKeyName =: sortkeyval

...