Как мне истечь ключи в DynamoDB с Boto? - PullRequest
5 голосов
/ 18 февраля 2012

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 24 января 2014

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

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

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

  1. Создавайте новую таблицу каждый день для этого типа записи и сохраняйте новые записи в сегодняшней таблице.
  2. При чтении записей используйте подсказку о восстановлении чтения. Это означает, что если вы не можете найти запись в сегодняшней таблице, попробуйте найти ее во вчерашней таблице и при необходимости поместить в сегодняшнюю таблицу.
  3. Если вы найдете запись в одной из таблиц, проверьте ее с помощью отметки времени. В данный момент нет необходимости удалять просроченные записи.
  4. Бросьте все устаревшие таблицы в ваших задачах.

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

5 голосов
/ 02 мая 2012

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

Например:

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

Вот что делал memcached, когда я смотрел на источник несколько лет назад.

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

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

2 голосов
/ 07 марта 2017

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

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

1 голос
/ 18 февраля 2012

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

...