Усечение таблиц DynamoDB сверх того, что позволяет TTL - PullRequest
0 голосов
/ 25 июня 2018

У меня есть таблица DynamoDB, в которой есть created столбец даты / времени, который указывает, когда запись / элемент была вставлена ​​в таблицу. В этой таблице у меня есть данные за 20 лет (записи были перенесены из предыдущей базы данных), и теперь я хотел бы усечь все, что старше 6 месяцев, для продвижения вперед.

Очевидная вещь, которую нужно сделать здесь, это установить TTL на стол на 6 месяцев, однако я понимаю, что AWS TTL возвращаются только на определенное количество лет (пожалуйста, исправьте меня, если вы знаете иначе!). Таким образом, я понимаю, что если бы я установил 6-месячный TTL для 20-летних данных, я мог бы удалить запись, начиная с 6-месячного возраста, возможно, на 3 - 5 лет, но тогда было бы очень много действительно старые данные остались без изменений TTL (еще раз, пожалуйста, исправьте меня, если вы знаете иначе!). Итак, я думаю, что я ищу:

  1. Возможность ручного одноразового удаления данных старше 6 месяцев; и
  2. Возможность установить 6-месячный TTL, двигаясь вперед

Для первого мне нужно выполнить что-то , например DELETE FROM mytable WHERE created > '2018-06-25', однако я не могу понять, как это сделать из консоли управления AWS / DynamoDB, есть идеи?

Для второй части, когда я иду на Управление TTL в консоли DynamoDB:

enter image description here

На самом деле я не вижу, где бы я установил 6-месячный срок действия. Это поля даты / времени в самом низу этого диалога ?! Мне кажется странным ... если бы это было так, то TTL не был бы прокручиваемым 6-месячным окном, это был бы просто жестко заданный момент времени, который мне нужно было бы обновлять вручную, чтобы данные никогда не превышали 6 месяцев ...

1 Ответ

0 голосов
/ 26 июня 2018

Вы правы насчет того, как далеко назад заходит TTL, на самом деле это 5 лет. Это работает, сравнивая значение вашего атрибута TTL с текущей отметкой времени. Если у вашего элемента есть отметка времени, которая старше текущей отметки времени, ее планируется удалить в течение следующих 48 часов (это не сразу). Таким образом, если вы используете метку времени создания элемента, все будет запланировано для удаления, как только вы вставите, и это не то, что вы хотите.

Способ применения политики 6-месячного срока действия в вашем приложении. Когда вы создаете элемент, установите для атрибута TTL метку времени на 6 месяцев раньше времени создания и просто оставьте его там. Динамо позаботится об его удалении через 6 месяцев. Что касается ваших "старых" данных, я не вижу способа обходить и циклически проходить через каждый элемент и устанавливать TTL для каждого из них вручную.

...