AWS DynamoDB 生存周期(TTL)使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37263637/article/details/81460258

Mongodb 具有自动删除某些过期数据的功能,同样dynamodb也有相应功能,那就是timetolive(生存周期),我们可以用它来删除一些oauth2认证中过期的oauth_code 和oauth_token。

相关文档:
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html

环境:aws sdk(nodejs)

1 基本概念

DynamoDB的生存时间(TTL)允许您定义表中的某个项目(Item)何时到期,以便可以从数据库中自动删除它们。

TTL是免费提供的,可以在不使用预配置吞吐量的情况下减少存储使用并降低存储不相关数据的成本。在表上启用TTL后,您可以基于每个项目设置删除时间戳,从而允许您将存储使用限制为仅限于相关的记录。

2 TTL 工作过程

TTL将时期格式的当前时间与项目(item)的生存时间属性中存储的时间进行比较。如果存储在属性中的纪元时间值小于当前时间,则该项目被标记为已过期并随后被删除。此处理在后台自动进行,不会影响对表的读取或写入流量。

纪元时间:纪元时间是UTC时间1970年1月1日凌晨12:00:00之后经过的秒数注意不是毫秒数

重要:
DynamoDB通常会在到期后48小时内删除过期的项目,所以有一定随机性。到期后项目真正被删除的确切持续时间特定于工作负载的性质和表的大小。已过期但尚未删除的项目仍将显示在读取,查询和扫描中。这些项目仍然可以更新,并且将成功更新以更改或删除到期属性。当项目被删除时,它们将立即以与标准删除操作相同的最终一致方式从任何本地二级索引和全局二级索引中删除。

3 如何使用

AWS SDK 提供了updateTimeToLive 接口。

updateTimeToLive

意义:
updateTimeToLive方法将启用或禁用指定表的TTL。成功UpdateTimeToLive通话会返回当前通话TimeToLiveSpecification;
更改可能需要一个小时才能完全处理。UpdateTimeToLive在这一小时的持续时间内对同一个表的任何其他调用都会导致a ValidationException 错误。

var params = {
  TableName: 'STRING_VALUE', /* required */ 
  TimeToLiveSpecification: { /* required */
    AttributeName: 'STRING_VALUE', /* required */  
    Enabled: true || false /* required */
  }
};
dynamodb.updateTimeToLive(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
  • TableName:要配置的表的名称。
  • AttributeName:用于存储表中项目的到期时间的生存时间属性的名称。number类,是UTC时间1970年1月1日凌晨12:00:00之后经过的秒数
  • Enabled:指示是否要在表上启用(true)或禁用(false)生存时间。

4 Sample Code

var AWS = require('aws-sdk');
var DataSchema = require('./dynamodb_schema.json');

AWS.config.loadFromPath('./config/models/aws_config.json');
AWS.config.update({region : DataSchema.region});

var DynamoDBClinet = new AWS.DynamoDB.DocumentClient({ endpoint: new AWS.Endpoint(DataSchema.url) });
var dynamodb = new AWS.DynamoDB({ endpoint: new AWS.Endpoint(DataSchema.url)});

let params = {
    TableName: 'oauth_code', /* required */
    TimeToLiveSpecification: { /* required */
      AttributeName: 'expires_at', /* required */
      Enabled: true/* required */
    }
  };
dynamodb.updateTimeToLive(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

猜你喜欢

转载自blog.csdn.net/m0_37263637/article/details/81460258