在 DynamoDB 中自动填充时间戳



我来自关系数据库背景,我们有一种方法可以填充时间戳以进行行创建和更新。我很难找到 DynamoDB 的类似功能。

我检查了 DynamoDB,以检查它们是否支持自动填充 dynamoDB 中每个条目的日期时间戳。我看到可以创建随机ID,但这不是我需要的。

我的使用案例是在向 DynamoDB 表添加任何条目时自动添加时间戳条目。感谢任何指示。谢谢

使用注释的 Java 解决方案(数据建模包(

您可以使用DynamoDBAutoGeneratedTimestamp批注。

@DynamoDBAutoGeneratedTimestamp(strategy=DynamoDBAutoGenerateStrategy.CREATE)
public Date getCreatedDate() { return createdDate; }
public void setCreatedDate(Date createdDate) { this.createdDate = createdDate; }
@DynamoDBAutoGeneratedTimestamp(strategy=DynamoDBAutoGenerateStrategy.ALWAYS)
public Date getLastUpdatedDate() { return lastUpdatedDate; }
public void setLastUpdatedDate(Date lastUpdatedDate) { this.lastUpdatedDate = lastUpdatedDate; }

DynamoDBAutoGenerated Timestamp

没有这样的功能,例如 DEFAULT CURRENT TIMESTAMPUPDATE CURRENT_TIMESTAMP .您必须自己设置日期。

但是,如果您想跟踪更新的更改,则可以使用原子计数器之类的东西。

因此,在每次更新时,您都会增加计数器值。

使用 aws-sdk 版本 2.17.169 对我有用的方法:

首先,您需要定义要支持的扩展

自动生成时间戳记录扩展。

    @Bean
    public DynamoDbEnhancedClient dynamoDbEnhancedClient(){
        return DynamoDbEnhancedClient.builder()
                .dynamoDbClient(dynamoDbClient())
                .extensions(AutoGeneratedTimestampRecordExtension.create())
                .build();
    }

然后,为 java.time.Instant 创建一个转换器。因为这是当时唯一支持的一个。

import java.time.Instant;
public class InstantToStringTypeConverter implements DynamoDBTypeConverter<String, Instant> {
    @Override
    public String convert(Instant instant) {
        return instant.toString();
    }
    @Override
    public Instant unconvert(String s) {
        return Instant.parse(s);
    }

最后,在模型上添加注释:

    @DynamoDbAutoGeneratedTimestampAttribute
    @DynamoDBTypeConverted(converter = InstantToStringTypeConverter.class)
    public Instant getCreated() {
        return created;
    }
    public void setCreated(Instant created) {
        this.created = created;
    }
    @DynamoDbAutoGeneratedTimestampAttribute
    @DynamoDBTypeConverted(converter = InstantToStringTypeConverter.class)
    public Instant getUpdated() {
        return updated;
    }
    public void setUpdated(Instant updated) {
        this.updated = updated;
    } 

在此处查看一些参考资料

最新更新