DynamoDB TTL работает с уже существующими элементами? - PullRequest
1 голос
/ 01 апреля 2020

У меня есть таблица DynamoDB с кучей предметов в ней. Я настроил таблицу для использования атрибута «срок действия» в качестве атрибута TTL. Затем я ввел ошибку в моей системе, где я сохранил все элементы с атрибутом «expiry» (doh!).

Чтобы решить эту проблему, я отключил поддержку TTL на столе, а затем снова включил это с помощью атрибута «истечение срока». Должен был быть потрясающий кабуб, так как все просроченные предметы исчезли. Там не было Я ждал 24 часа, на случай, если «Динамо» нужно проснуться и обратить внимание на мой стол. Никакого поразительного kaboom (грустный марсианин ...).

Теперь мне интересно, действительно ли элементы в таблице, которые были на месте до включения TTL на правильном атрибуте, действительно пропустили лодку TTL и останутся там пока не будет удален вручную. Я что-то пропустил? Кто-нибудь еще испытывал это?

1 Ответ

1 голос
/ 02 апреля 2020

Да, DynamoDB должен удалять просроченные элементы, даже если они были созданы до того, как был выбран столбец TTL. По крайней мере, ничего в документации не говорит об обратном. документация объясняет, как работает TTL:

DynamoDB сравнивает текущее время в формате эпохи со значением, сохраненным в пользовательском атрибуте Number элемента. Если значение атрибута в формате времени эпохи, меньше текущего времени и не старше 5 лет, элемент удаляется. Обработка происходит автоматически, в фоновом режиме.

Вы сказали, что ждали 24 часа, чтобы произошло удаление. Возможно, этого было недостаточно, потому что в том же документе также сказано:

Обычно DynamoDB удаляет просроченные элементы в течение 48 часов после истечения срока действия. Точная продолжительность, в течение которой элемент действительно удаляется после истечения срока действия, задает c для характера рабочей нагрузки и размера таблицы.

Теперь, когда 48 часов прошло , не могли бы вы проверить еще раз?

Обновление (на основе обсуждения выше): Если функция TTL, кажется, не работает, вы должны убедиться, что вы правильно устанавливаете атрибут TTL. Сначала убедитесь, что вы устанавливаете атрибут с правильным именем (это была первая проблема спрашивающего). Затем вы должны убедиться, что в этом атрибуте установлены значения integer (это не может быть строка!). Наконец, убедитесь, что это целое число - это количество секунд с начала эпохи (полночь по Гринвичу, 1 января 1970 г.) - спрашивающий случайно использовал миллисекунды вместо секунд, чтобы он не работал.

...