Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Boto使dynamoDB中的密钥过期?_Python_Key Value_Boto_Amazon Dynamodb - Fatal编程技术网

Python 如何使用Boto使dynamoDB中的密钥过期?

Python 如何使用Boto使dynamoDB中的密钥过期?,python,key-value,boto,amazon-dynamodb,Python,Key Value,Boto,Amazon Dynamodb,我正试着从redis搬到dynamoDB,现在一切都很好!我唯一还没有弄清楚的是密钥过期。目前,我的数据设置只有一个主键,没有范围键,因此: { "key" => string, "value" => ["string", "string"], "timestamp" => seconds since epoch } 我的想法是扫描数据库中时间戳小于特定值的位置,然后显式删除它们。然而,这看起来效率极低,并且会无缘无故地消耗大量的读/写单元!最重要的是,只有在我运

我正试着从redis搬到dynamoDB,现在一切都很好!我唯一还没有弄清楚的是密钥过期。目前,我的数据设置只有一个主键,没有范围键,因此:

{
  "key" => string,
  "value" => ["string", "string"],
  "timestamp" => seconds since epoch
}
我的想法是扫描数据库中时间戳小于特定值的位置,然后显式删除它们。然而,这看起来效率极低,并且会无缘无故地消耗大量的读/写单元!最重要的是,只有在我运行扫描时才会发生过期,所以可以想象它们会累积


那么,有人找到了解决这个问题的好方法吗?

您可以使用时间戳作为范围键,它将被索引,并允许基于时间进行更简单的操作。

您可以执行延迟过期,并根据请求将其删除

例如:

  • 属性为“expiration”的存储密钥“a”将在10分钟后过期
  • 9分钟后取回,检查过期时间,然后归还
  • 11分钟后到。检查有效期。因为它比现在小,所以删除条目
这就是memcached在几年前查看源代码时所做的

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


您也可以考虑使用弹性键,它是用于缓存而不是永久数据存储的。

< P>我也使用DyDoDB,就像我们使用ReiS.</P>的方式一样。 我的建议是将密钥写入不同的时间切片表中

例如,假设一种类型的记录应该持续几分钟,最多不超过一小时,那么您就可以了

  • 每天为此类型的记录创建一个新表,并在今天的表中存储新记录
  • 读取记录时请使用读取修复提示,这意味着如果在今天的表中找不到记录,请尝试在昨天的表中找到它,必要时将其放入今天的表中
  • 如果在任一表中找到记录,请使用其时间戳进行验证。现在没有必要删除过期的记录
  • 在任务中删除整个过时的表

  • 这更易于维护且成本效益高

    亚马逊似乎刚刚向DynamoDB添加了过期支持(截至2017年2月27日)。请看官方博客:


    实际上没有任何基于时间的操作。。。只是数据过了一段时间就过时了,我还不如把它处理掉。使用时间戳作为范围字段也没有真正的帮助,因为任何键都可能过时,所以我们必须恢复到
    扫描
    !是的,我不认为有自动过期功能,你正在寻找,所以你所做的任何事情都必须作为一个批处理工作。最简单的方法是按日期对表进行分区,或者根据需要进行清理。