Как продлить срок действия ключей в DynamoDB с помощью Boto?

Я пытаюсь перейти с Redis на DynamoDB, и все работает отлично! Единственное, что мне еще предстоит выяснить, это срок действия ключа. В настоящее время у меня есть настройка данных с одним первичным ключом и без ключа диапазона:

{
  "key" => string,
  "value" => ["string", "string"],
  "timestamp" => seconds since epoch
}

Я думал о том, чтобы выполнить сканирование базы данных на предмет того, где временная метка меньше определенного значения, а затем явно удалить их. Это, однако, кажется чрезвычайно неэффективным и без всякой причины израсходует смехотворное количество единиц чтения/записи! Кроме того, истечения срока действия будут происходить только тогда, когда я запускаю сканирование, поэтому они могут накапливаться.

Итак, кто-нибудь нашел хорошее решение этой проблемы?


person Micha Gorelick    schedule 18.02.2012    source источник


Ответы (4)


Я также использую DynamoDB так же, как мы использовали Redis.

Я предлагаю записать ключ в разные временные таблицы.

Например, скажем, тип записи должен длиться несколько минут, максимум меньше часа, тогда вы можете

  1. Каждый день создавайте новую таблицу для этого типа записей и сохраняйте новые записи в сегодняшней таблице.
  2. Используйте совет по исправлению чтения при чтении записей, что означает, что если вы не можете найти запись в сегодняшней таблице, вы пытаетесь найти ее во вчерашней таблице и при необходимости вставляете в сегодняшнюю таблицу.
  3. Если вы найдете запись в любой из таблиц, проверьте ее по отметке времени. На данный момент нет необходимости удалять записи с истекшим сроком действия.
  4. Отбросьте целые устаревшие таблицы в своих задачах.

Это проще в обслуживании и экономичнее.

person Shih-Wen Su    schedule 24.01.2014

Вы можете сделать ленивый срок действия и удалить его по запросу.

Например:

  • хранить ключ "а" с атрибутом "истечение срока действия", срок действия которого истекает через 10 минут.
  • получить через 9 минут, проверить срок действия, вернуть его.
  • получить за 11 минут. проверить срок годности. так как это меньше, чем сейчас, удалить запись.

Это то, что делал memcached, когда я просматривал исходный код несколько лет назад.

Вам все равно нужно выполнить сканирование, чтобы удалить все старые записи.

Вы также можете рассмотреть возможность использования Elasticache, который предназначен для кэширования, а не для постоянного хранилища данных.

person Jon Haddad    schedule 01.05.2012

Похоже, что Amazon только что добавила поддержку истечения срока действия в DynamoDB (по состоянию на 27 февраля 2017 г.). Взгляните на официальный пост в блоге:

https://aws.amazon.com/blogs/aws/new-manage-dynamodb-items-using-time-to-live-ttl/

person OriolJ    schedule 07.03.2017

Вы можете использовать метку времени в качестве ключа диапазона, который будет проиндексирован и позволит упростить операции в зависимости от времени.

person Nick    schedule 18.02.2012
comment
На самом деле нет никаких операций, основанных на времени ... просто данные через некоторое время устаревают, и я могу избавиться от них. Использование метки времени в качестве поля диапазона также не очень помогает, поскольку любой ключ может быть устаревшим, поэтому нам все равно придется вернуться к scan! - person Micha Gorelick; 19.02.2012
comment
Да, я не думаю, что есть функция автоматического истечения срока действия, которую вы ищете, поэтому все, что вы делаете, должно выполняться как пакетное задание. Самый простой способ — разделить таблицы по дате или выполнить очистку по мере необходимости. - person Nick; 19.02.2012