25.partial update內置樂觀鎖並發控制
主要知識點
(1)partial update內置樂觀鎖並發控制
(2)retry_on_conflict
post /index/type/id/_update?retry_on_conflict=5&version=6
一、一般情況下partial update實現過程
用戶直接修改field,然後發送給應用程序,由應用程序直接發送給ES,和全量替換相比,全量替換要先去es進行查找,把查找的數據返回給應用程序,然後再次返回給用戶界面,只有這樣用戶才知道要替換什麽,partial update少了先查找的這一步。在es內部,由es先把原來舊的數據查找出來(得到數據和_version值),
二、並發情況下partial update實現過程
線程1取得es中的一條數據,此時_version=1,取得這條數據時對他進行partial update,
在線程1取得es中的數據後,線程二也取得該數據,並對該數據進行了修改,並寫回了es,此時es中該數據的_version=2,
當線程1把他取的數據進行修改後,重新寫回es時,所帶的_version =1 ,因為此時es中_version=2,所以修改不成功,es自動將該次
三、當_verion沖突時的辦法
線程一寫回數據時產生_version沖突,在這種情況下,就可以用以下語法:
1、post /index/type/id/_update?retry_on_conflict=5
retry策略:
(1) 再次獲取該document的數據和最新的版本號
(2) 基於最新的版本號再次去更新,如果成功就OK
(3) 如果不成功就再一次執行1和2的步驟,最多執行5次。
2、post /index/type/id/_update?retry_on_conflict=5&version=6
指定版本號,也就是說當這次更新成功後的版本號就是6
25.partial update內置樂觀鎖並發控制