在DynamoDB中自动填充时间戳

20

我来自关系型数据库背景,我们有一种方法为行创建和更新填充时间戳。但是我发现在DynamoDB中很难找到类似的功能。

我检查了DynamoDB并发现它支持自动填充每个条目的日期时间戳。虽然可以创建随机ID,但这不是我所需要的。

我的用例是在将任何条目添加到DynamoDB表时自动添加时间戳条目。感谢任何指针。谢谢。

3个回答

23

使用注解的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; }

DynamoDBAutoGeneratedTimestamp


6
目前,这不能用于Java 8日期类型。 - exe
4
请注意,这些时间戳是在 Java 端设置的,而不是在 DynamoDB 端设置的。 - alext
这有所帮助,但只有在映射器也生成键时才有效。 - Bhavi Daftery Jagwani

4

没有类似于DEFAULT CURRENT TIMESTAMPUPDATE CURRENT_TIMESTAMP的功能。您需要自己设置日期。

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

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


2

对我有效的是使用 aws-sdk-version 2.17.169

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

AutoGeneratedTimestampRecordExtension。

    @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;
    } 

查看一些参考资料在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接