ElasticSearch內部基于_version樂觀鎖控制機制
1、悲觀鎖與樂觀鎖機制
為控制并發問題,我們通常采用鎖機制。分為悲觀鎖和樂觀鎖兩種機制。
悲觀鎖:很悲觀,所有情況都上鎖。此時只有一個線程可以操作數據。具體例子為數據庫中的行級鎖、表級鎖、讀鎖、寫鎖等。
特點:優點是方便,直接加鎖,對程序透明。缺點是效率低,并發能力非常弱。
樂觀鎖:很樂觀,對數據本身不加鎖。提交數據時,通過一種機制驗證是否存在沖突,如es中通過版本號驗證。
特點:優點是并發能力高。缺點是操作繁瑣,在提交數據時,高并發的情況下,可能反復重試多次。
2、內部基于_version樂觀鎖控制
es對于文檔的增刪改都是基于版本號。
第一次執行
PUT /test_index/_doc/4 { "test_field": "test" }
此時可以版本號為1
在執行一次:
此時版本號已變為2,且result的值也為update
在執行刪除文檔操作
DELETE /test_index/_doc/4
版本號變為3,result的值為deleted
再執行一次新增語句,注意這里要和前一條刪除語句間隔時間不要太長,最好立即執行。
PUT /test_index/_doc/3 { "test_field": "test" }
可以看到版本號依然遞增,并且驗證成功延遲刪除策略。
因為如果刪除一條數據立馬刪除的話,所有分片和副本都要立馬刪除,對es集群壓力太大。
3、圖解es內部并發控制
es內部主從同步時,是多線程異步。采用樂觀鎖機制。
本文來自博客園,作者:|舊市拾荒|,轉載請注明原文鏈接:http://www.factorywings.com/xiaoyh/p/15978102.html