Можно ли использовать функцию TTL в DynamoDB как бесплатную альтернативу фактическому удалению элементов?

Я прочитал руководство разработчика по элементам с истекающим сроком действия, использующим DynamoDB TTL, и мне было интересно, можно ли использовать TTL в качестве альтернативы удалению, а не в дополнение к.

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html

Поскольку Amazon удаляет элемент за вас (когда им удобно) без использования каких-либо единиц записи, возможно ли, чтобы все мои удаления были выполнены таким образом? Идея состоит в том, чтобы создавать элементы без TTL, а затем вместо их удаления просто устанавливать TTL на текущее время. Я понимаю, что мне придется добавить некоторую логику для учета просроченных, но не удаленных элементов, но это кажется тривиальным по сравнению с экономией.

Это возможно?


person Jbarton98    schedule 10.08.2020    source источник


Ответы (2)


Идея состоит в том, чтобы создавать элементы без TTL, а затем вместо их удаления просто устанавливать TTL на текущее время.

Это не имеет смысла, вам нужно будет использовать WCU для обновления элемента, с тем же успехом можно просто удалить его.

Использование TTL для бесплатного удаления элемента имеет смысл, если вы можете установить TTL при создании элемента.

Я полагаю, что установка TTL с обновлением может быть полезна, если у вас несколько GSI. Вы платите только за обновление таблицы, удаление будет бесплатным. Тогда как если вы удалите запись в таблице, вы заплатите за таблицу и GSI.

person Charles    schedule 10.08.2020
comment
Разве не было бы преимуществ иметь 24-часовое окно восстановления удаленных элементов (при условии, что потоки включены)? Я не хочу, чтобы он был слишком сложным, если оно того не стоит, но я хотел бы четко взвесить свои варианты. - person Jbarton98; 10.08.2020
comment
в этой ссылке нет ничего, что упоминает окно восстановления .... - person Charles; 10.08.2020
comment
Мое плохое, это был другой ресурс, который я использовал. Вот правильный one. Если восстановление данных является проблемой, мы рекомендуем вам создать резервную копию своих таблиц. Для полностью управляемого резервного копирования таблиц используйте резервное копирование DynamoDB по требованию или непрерывное резервное копирование с восстановлением на определенный момент времени. Для 24-часового окна восстановления вы можете использовать DynamoDB Streams. Дополнительные сведения см. В разделах «Потоки DynamoDB» и «Время жизни». - person Jbarton98; 10.08.2020
comment
24-часовое окно специфично для Streams, у вас будет такое же окно, если вы вручную удалили запись. - person Charles; 11.08.2020
comment
Спасибо, так как в моей таблице нет GSI, удаление, вероятно, будет стоить столько же без дополнительных преимуществ. Это то, что я искал ???? - person Jbarton98; 11.08.2020

Вы правы в том, что сами элементы будут удалены без каких-либо затрат для вас, что делает этот процесс бесплатным для удаления элементов.

Процесс удаления может занять до 48 часов с момента времени TTL (элементы помещаются в очередь в качестве фонового действия), поэтому вам необходимо убедиться, что ваше приложение выполняет логику для фильтрации этих элементов.

В зависимости от размера и уровня активности таблицы фактическая операция удаления просроченного элемента может варьироваться. Поскольку TTL должен быть фоновым процессом, характер емкости, используемой для истечения срока действия и удаления элементов через TTL, является переменным (но бесплатным). TTL обычно удаляет просроченные элементы в течение 48 часов после истечения срока действия.

Если у вас нет больших объемов данных, которые вы удаляете / обновляете, вы просто будете использовать любой из доступных WCU, оставшихся в вашей таблице DynamoDB.

person Chris Williams    schedule 10.08.2020