如何使用Boto使dynamoDB中的密钥失效?

Mic*_*ick 5 python key-value boto amazon-dynamodb

我正试图从redis迁移到dynamoDB,并且一切都工作得很好!我唯一还没想到的是密钥到期.目前,我的数据设置有一个主键,没有范围键,因此:

{
  "key" => string,
  "value" => ["string", "string"],
  "timestamp" => seconds since epoch
}
Run Code Online (Sandbox Code Playgroud)

我想的是在数据库上扫描时间戳小于特定值的位置,然后显式删除它们.然而,这看起来非常低效,并且会无缘无故地耗尽一些荒谬的读/写单元!最重要的是,只有在我运行扫描时才会发生这种情况,因此可以想象它们可以构建.

那么,有没有人找到这个问题的好方法呢?

Shi*_* Su 7

我也像我们以前使用Redis一样使用DynamoDB.

我的建议是将密钥写入不同的时间切片表.

例如,假设一种记录应该持续几分钟,最多不到一小时,那么你可以

  1. 每天为此类记录创建一个新表,并在今天的表中存储新记录.
  2. 当您阅读记录时使用读取修复提示,这意味着如果您在今天的表格中找不到记录,则尝试在昨天的表格中找到它并在必要时放入今天的表格中.
  3. 如果您在任一表中找到记录,请使用它的时间戳验证它.此时无需删除过期记录.
  4. 删除任务中的所有陈旧表.

这更容易维护并且更具成本效益.


Jon*_*dad 5

你可以做懒惰的过期并根据要求删除它.

例如:

  • 存储具有属性"expiration"的密钥"a",在10分钟后到期.
  • 在9分钟内获取,检查到期,返回.
  • 在11分钟内取.检查到期日.因为它比现在少,删除条目.

这就是几年前我查看源代码时memcached所做的事情.

您仍然需要扫描以删除所有旧条目.

您还可以考虑使用Elasticache,它用于缓存而不是永久数据存储.


Nic*_*ick 1

您可以使用时间戳作为范围键,该范围键将被索引并允许基于时间更轻松的操作。