更新时间:2025-07-02 GMT+08:00

如何使用TTL

GeminiDB兼容DynamoDB接口的TTL功能用于定时清理不再需要的数据行。您可以指定表中每一行的过期时间戳,GeminiDB兼容DynamoDB接口会在过期时间后的一段内自动将其删除。

如何配置TTL

可以通过UpdateTimeToLive接口打开/关闭表级别TTL开关,并设置表级别TTL列名,该列值即为过期时间戳的数值。

// 打开指定表的TTL开关,指定某一列的值为TTL时间戳
UpdateTimeToLiveRequest request1 = new UpdateTimeToLiveRequest()
                .withTableName("$tableName")
                .withTimeToLiveSpecification(new TimeToLiveSpecification()
                        .withAttributeName("$ttlAttr")
                        .withEnabled(true)
                );
// 通过UpdateItem等接口可以更新TTL列值
UpdateItemRequest request2 = new UpdateItemRequest()
                .withTableName("$tableName")
                .withKey(keyMap)
                .withUpdateExpression("SET $ttlAttr = :$ttlVal")
                .withExpressionAttributeValues(valueMap);
// 关闭指定表的TTL开关
UpdateTimeToLiveRequest request1 = new UpdateTimeToLiveRequest()
                .withTableName("$tableName")
                .withTimeToLiveSpecification(new TimeToLiveSpecification()
                        .withEnabled(false)
                );

使用DescribeTimeToLive接口可以查询表级别的TTL配置情况,包括TTL开关是否打开和TTL列名。

// 查询指定表的TTL配置
DescribeTimeToLiveRequest request1 = new DescribeTimeToLiveRequest().withTableName("$tableName");
  • TTL列类型必须为Number(N)。
  • TTL列值会被转换为GMT+0时区的Unix时间戳(以秒为单位),与当前时间比较来判断是否过期。
  • TTL以定时任务的方式在后台运行,因此实际被删除的时间点并非与设置的过期时间戳完全一致,具体偏移量与任务执行周期有关。
  • 所有打开TTL开关的用户表都会在TTL后台任务中被扫描,因此如果您不再需要某张表的TTL功能,推荐您关闭TTL开关。
  • 兼容Dynamo Streams。通过TTL删除的行,会在实际被删除的时间点插入到Dynamo Streams记录中。