上機動手實戰基於 version進行樂觀併發控制

2022-09-21 20:51:13 字數 1939 閱讀 5068

1.先構造一條資料

put /test_index/test_type/7

2.模擬兩個客戶端,都獲取到了同一條資料

get /test_index/test_type/7

1結果:

}3.其中乙個客戶端,先更新了一下這個資料

同時帶上資料的版本號,確保說,es中資料的版本號,跟客戶端中的資料的版本號相同才能修改

put /test_index/test_type/7?version=1

結果version變為2

put /test_index/test_type/7?version=1

4.另外乙個客戶端嘗試基於version=1的資料去進行修改,同樣帶上version的版本號,進行樂觀鎖的併發控制

put /test_index/test_type/7?version=1

結果:],

"type": "version_conflict_engine_exception",

"reason": "[test_type][7]: version conflict, current version [2] is different than the one provided [1]",

"index_uuid": "zt6vyfvpqw60vmoprz56ua",

"shard": "3",

"index": "test_index"

},"status": 409

}5.在樂觀鎖成功阻止併發問題之後,嘗試正確的完成更新

首先檢視當前的版本號

get /test_index/test_type/7

根據版本號把對應的version去put(可能這個步驟需要反覆執行好幾次,才能成功,特別是在多執行緒併發更新同一條資料很頻繁的情況下)

put /test_index/test_type/7?version=2

結果:,

"_seq_no": 4,

"_primary_term": 2

}基於內部的version

1.先構造一條資料

put /test_index/test_type/9

2.模擬兩個客戶端同時查詢到這條資料

get /test_index/test_type/9

結果:}

3.第乙個客戶端先進行修改,此時客戶端程式是在自己的資料庫中獲取到了這條資料的最新版本號,比如說2

put /test_index/test_type/9?version=2&version_type=external

成功:,

"_seq_no": 3,

"_primary_term": 2

}4.模擬第二個客戶端,同時拿到了自己資料庫中的哪個版本號,也是2,同時基於version=2發起了修改

put /test_index/test_type/9?version=2&version_type=external

錯誤了:

],"type": "version_conflict_engine_exception",

"reason": "[test_type][9]: version conflict, current version [2] is higher or equal to the one provided [2]",

"index_uuid": "zt6vyfvpqw60vmoprz56ua",

"shard": "1",

"index": "test_index"

},"status": 409

}5.在併發控制成功後,重新基於最新的版本號發起更新

獲取最新的資料

get /test_index/test_type/9?1}

指定version為3比原來的大

put /test_index/test_type/9?version=3&version_type=external

成功了:

AI實戰 動手實現人臉識別程式

人臉識別在現實生活中有非常廣泛的應用,例如iphone x的識別人臉解鎖螢幕 人臉識別考勤機 人臉識別開門禁 刷臉坐高鐵,還有識別人臉虛擬化妝 美顏,甚至支付寶還推出了刷臉支付 建設銀行還實現了刷臉取錢 可見人臉識別的用處非常廣。既然人臉識別這麼有用,那我們能否自己來實現乙個人臉識別模型呢?答案是肯...

基於Python的爬蟲實戰

方法 一 使用bs4包 1.獲取酷狗 內容 coding utf 8 import requests,urllib from bs4 import beautifulsoup import os result urllib.request.urlopen 2.根據html結構獲取目標標籤內容 sou...

動手實戰建立RDD的三種方式

1.通過已經存在的scala集合 2.通過hdfs,hbase等 從 hadoop中的hdfs讀取資料。todebugstring可以檢視rdd建立的過程 1.首先要從hadoop中讀取資料,因此會有mapred.fileinputformat,共有88個檔案 2.hadooprdd就把物理層分片轉...