更新时间: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记录中。