iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
Software Development

從Java進入AWS部署RESTful API的心路歷程系列 第 28

Day28-概論(十五)含版本編號的樂觀鎖定

  • 分享至 

  • xImage
  •  

含版本編號的樂觀鎖定

原本DynamoDB的儲存方式為最後者獲勝,但是AWS SDK提供了一種用版本編號的樂觀鎖定方式,說穿了就是使用之前提到的條件式儲存配合一個版本編號屬性,來達成的功能。所以這不是DynamoDB本身的儲存機制,而是AWS SDK提供的實作方法。

實作邏輯

樂觀鎖定的核心概念是,以一個版本屬性紀錄目前項目的版本編號。當程式作業儲存項目時,必須提供該項目之前讀取到的版本編號,只有版本編號一致時才進行儲存;也就代表了從之前讀取項目到儲存項目為止,該項目並沒有被異動過。而後儲存成功時,版本編號自動增加。

實作調整範例

bean

新增一個儲存版本編號的屬性,需要nullable類型,如Integer、Long
因為request/response都需要使用,所以設定為Public

@DynamoDBVersionAttribute
@JsonView({ Views.Public.class });
private Long version;

save

因為request時,version沒有以views作為區分新增或更新要求,另一個偷懶的方式是在save判斷id為空而為新增項目時,將version設為null

person.setVersion(null);

原則上以上兩個小修改就能實作樂觀鎖定了

使用樂觀鎖定的條件

使用樂觀鎖定時要注意兩點

  • DynamoDBMapper提供的transaction(交易)方式不支援樂觀鎖定。
  • 當save/delete時使用SaveBehavior.CLOBBER可以停用樂觀鎖定檢查,這方法可以視為功能需求而選用。

上一篇
Day27-實作(八)條件式save & update
下一篇
Day29-實作(九)時間序列資料-定義
系列文
從Java進入AWS部署RESTful API的心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言