增强的DynamoDB客户端-Java抽象代码


DynamoDb在2020年推出了与AWS开发工具包2.0捆绑在一起的增强型客户端。现在,建议使用此客户端来使用应用程序类在DynamoDB上执行数据库操作。

在我最近的项目中,我们几乎没有针对以下情况建立的方案

按照事务中的设置执行插入+更新。对于已存在主键(分区和排序)的插入,事务应失败。另外,如果记录由另一个进程更新,则更新将失败。

重复插入可以通过语句中的条件表达式来控制。这是重复的模式。有必要将其抽象出来,以便并非所有开发人员都需要更深入地研究发电机代码。

我创建了一个Helper代码,该代码需要一个Java对象并无缝地将事务执行到DynamoDb上。该github repo中提供了帮助程序代码。回购上的自述文件有更多详细信息。

除了必须在Java POJO上应用的Dynamodb增强客户端注释之外,还有3个自定义注释。

  1. @Table(name =“ ACCOUNT”)—在此处指定要在其中发布对象的DynamoDB表。

  2. @PartitionKey —这是字段级别的注释。您标记出与项目相关的分区键

  3. @SortKey —这是字段级别的注释。您标记出项目的排序键

@Data
@ToString
@Table(name = "ACCOUNT")
@DynamoDbBean
public class FakeStudent {

    // Department
    @PartitionKey
    private String PARTITION_KEY;

    // roll number
    @SortKey
    private String SORT_KEY;

    private Integer fees;
    private String ID;
    private String STUDENT_NAME;
    private FakePicture img;
    private Integer version;

    @DynamoDbVersionAttribute
    public Integer getVersion() {
        return version;
    }
    @DynamoDbPartitionKey
    public String getPARTITION_KEY() {
        return PARTITION_KEY;
    }

    @DynamoDbSortKey
    public String getSORT_KEY() {
        return SORT_KEY;
    }
}

注释了POJO之后,开发人员需要创建一个事务包并仅执行事务。

EHelper.TxnPacket packet = EHelper.TxnPacket.builder()
   .update(item1, FakeStudent.class, null )
   .insert(item2, FakeStudent.class)
   .build();
EHelper.executeTransactionWrite(packet);

增强的客户端已经提供了使用@DynamoDbVersionAttribute通过项目版本控制进行更新的乐观处理。

2.使用各种sortkey访问模式查询Dynamo。helper类包含一些方法,这些方法使开发人员可以使用Java对象抽象来查询发电机表。

@ Table,@ ParitionKey和@SortKey的以上三个注释需要应用。例子

*获取具有分区键和排序键的单个项目

FakeStudent s1 = new FakeStudent();
// department
s1.setPARTITION_KEY("Engineering");
// roll number;
s1.setSORT_KEY("120");
FakeStudent item1 = EHelper.getItem(s1);

*获取给定分区键且大于提供的排序键的项目列表

FakeStudent s1 = new FakeStudent();
// department
s1.setPARTITION_KEY("Engineering");
// roll number;
s1.setSORT_KEY("120");
final List<FakeStudent> item1 = EHelper.querySortKeyGreaterThanOrEqualTo(s1,null,true);

助手也支持条件表达式。值属性映射是通过增强客户端提供的Java Reflection和Schema支持库的组合自动创建的。

该助手将随着时间的推移而发展。当前,@ PartitionKey支持仅限于Integer和String类。我希望该库可以节省时间和精力,并提高项目速度。

编码愉快!


原文链接:http://codingdict.com