码迷,mamicode.com
首页 > 数据库 > 详细

DynamoDB 乐观锁

时间:2019-10-02 23:20:05      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:因此   对象   客户   删除   mapper   strong   匹配   记录   aws   

乐观锁 是一种确保正在更新(或删除)的客户端项目与 Amazon DynamoDB 中的项目相同的策略。如果您使用此策略,则将防止数据库写入由他人的写入覆盖,反之亦然。

注意

  • DynamoDB 全局表在并发更新之间使用“以最后写入者为准”原则。如果使用全局表,则以最后写入者策略为准。因此,在这种情况下,锁定策略无法按预期方式工作。

  • DynamoDBMapper 事务操作不支持乐观锁。

使用乐观锁时,每个项目都具有一个充当版本号的属性。如果您检索表中的项目,则应用程序会记录该项目的版本号。您可以更新该项目,但只有在服务器端的版本号没有改变时才能更新。如果存在版本不匹配,则意味着其他人在您之前修改了该项目。更新尝试会失败,这是因为您拥有的是该项目的过时版本。如果发生此情况,您只需通过检索项目然后尝试更新来重试。乐观锁可防止您意外覆盖他人所做的更改。它还可防止他人意外覆盖您所做的更改。为了支持乐观锁,AWS SDK for Java提供了 @DynamoDBVersionAttribute 注释。在适用于表的映射类中,您需要指定一个用于存储版本号的属性,并使用此注释对其进行标记。当您保存对象时,DynamoDB 表中对应的项目就会具有存储相应版本号的属性。DynamoDBMapper 会在您第一次保存对象时分配一个版本号,并且在每次更新项目时递增版本号的值。只有在客户端对象版本与 DynamoDB 表中对应的项目版本号相匹配时,您的更新或删除请求才会成功。

 1 @DynamoDBTable(tableName="ProductCatalog")
 2 public class CatalogItem {
 3     
 4     private Integer id;
 5     private String title;
 6     private String ISBN;
 7     private Set<String> bookAuthors;
 8     private String someProp;
 9     private Long version;
10 
11     @DynamoDBHashKey(attributeName="Id")  
12     public Integer getId() { return id; }
13     public void setId(Integer Id) { this.id = Id; }
14     
15     @DynamoDBAttribute(attributeName="Title")  
16     public String getTitle() { return title; }    
17     public void setTitle(String title) { this.title = title; }
18     
19     @DynamoDBAttribute(attributeName="ISBN")  
20     public String getISBN() { return ISBN; }    
21     public void setISBN(String ISBN) { this.ISBN = ISBN;}
22     
23     @DynamoDBAttribute(attributeName = "Authors")
24     public Set<String> getBookAuthors() { return bookAuthors; }    
25     public void setBookAuthors(Set<String> bookAuthors) { this.bookAuthors = bookAuthors; }
26     
27     @DynamoDBIgnore
28     public String getSomeProp() { return someProp;}
29     public void setSomeProp(String someProp) {this.someProp = someProp;}
30     
31     @DynamoDBVersionAttribute
32     public Long getVersion() { return version; }
33     public void setVersion(Long version) { this.version = version;}
34 }

 

DynamoDB 乐观锁

标签:因此   对象   客户   删除   mapper   strong   匹配   记录   aws   

原文地址:https://www.cnblogs.com/cloudrivers/p/11618677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!