Как массово удалить все записи без TTL из Dynamodb?

Как говорится в вопросе, у меня около 200 миллионов записей данных в таблице DynamoDB. Я пишу скрипт в nodejs, который должен удалить все данные без TTL. У меня есть 3 идеи на этот счет, и мне любопытно, как мне это сделать на стольких записях.

  1. batchWrite, этот вариант я бы сканировал, а затем разбивал на страницы всю таблицу, удаляя каждую запись, поскольку она соответствует условию отсутствия в настоящее время ttl

  2. поместите все записи, у которых нет ttl, в новую таблицу, а затем сразу удалите эту таблицу

  3. установить ttl для записей, у которых его нет, но я не могу найти никакой информации, если это вообще что-то, или я могу каким-то образом массово добавить ttl ко всем записям без него

Любая информация полезна, пожалуйста, дайте мне знать, как я могу это сделать! Спасибо


person kayvera    schedule 15.01.2021    source источник
comment
Я не понимаю, как сработает ваша вторая идея. Если вы скопировали все записи из одной таблицы во вторую, а затем удалили вторую таблицу, они все равно будут существовать в первой таблице. Для третьего варианта вы можете посмотреть этот aws.amazon.com/blogs/database/   -  person Mark B    schedule 16.01.2021
comment
извините, я имел в виду скопировать правильные записи в новую таблицу и удалить старую, моя ошибка. Как вы думаете, третья идея будет стоить меньше всего?   -  person kayvera    schedule 16.01.2021
comment
Я понятия не имею о затратах. Если вам нужно раскрутить несколько серверов EMR для третьего варианта, это, вероятно, будет стоить больше всего, но это может быть единственный способ сделать это за разумное время.   -  person Mark B    schedule 16.01.2021
comment
@kayvera нужно удалить все данные без TTL. Это означает, что вы хотите удалить только те записи, которые в настоящее время не имеют поля TTL? В вашей таблице есть записи, у которых есть TTL?   -  person Anshul Saraswat Kaul    schedule 16.01.2021
comment
да, у меня есть таблица, в которой некоторые данные имеют TTL, а некоторые нет. Я просто не уверен, какой способ является наиболее экономически эффективным способом справиться с этим. Ссылка, добавленная @MarkB, на самом деле, вероятно, сработает, но то же самое с двумя другими идеями, я просто не знаю, какой из них лучше всего сделать.   -  person kayvera    schedule 16.01.2021


Ответы (1)


Я бы выбрал вариант 1 -

Проверьте документ Parallel Scan, вставив некоторую информацию здесь.

Сегмент — сегмент, который должен быть просканирован определенным работником. Каждый рабочий процесс должен использовать свое значение для сегмента.
TotalSegments — общее количество сегментов для параллельного сканирования. Это значение должно совпадать с количеством рабочих процессов, которые будет использовать ваше приложение.

Здесь каждый сегмент будет работать с каждым разделом, созданным DDB в вашей таблице. Каждый раздел в DDB имеет размер 10 ГБ. Благодаря ускорению сканирования/чтения теперь мы можем выполнять удаление с помощью BatchWrites.

person Anshul Saraswat Kaul    schedule 15.01.2021
comment
@kayvera См. это ссылка, чтобы получить более подробную информацию. Дайте нам знать, если это помогло! - person Anshul Saraswat Kaul; 16.01.2021