DynamoDb在2020年推出了与AWS开发工具包2.0捆绑在一起的增强型客户端。现在,建议使用此客户端来使用应用程序类在DynamoDB上执行数据库操作。
在我最近的项目中,我们几乎没有针对以下情况建立的方案
按照事务中的设置执行插入+更新。对于已存在主键(分区和排序)的插入,事务应失败。另外,如果记录由另一个进程更新,则更新将失败。
重复插入可以通过语句中的条件表达式来控制。这是重复的模式。有必要将其抽象出来,以便并非所有开发人员都需要更深入地研究发电机代码。
我创建了一个Helper代码,该代码需要一个Java对象并无缝地将事务执行到DynamoDb上。该github repo中提供了帮助程序代码。回购上的自述文件有更多详细信息。
除了必须在Java POJO上应用的Dynamodb增强客户端注释之外,还有3个自定义注释。
@Table(name =“ ACCOUNT”)—在此处指定要在其中发布对象的DynamoDB表。
@PartitionKey —这是字段级别的注释。您标记出与项目相关的分区键
@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