探尋ES中的數據併發問題

前言

1: 刪除文檔後,版本信息默認會保留60s。

2: 關於cas重試,是需要重新get 一下version的,那肯定會成功吧?這個場景主要在,對於多用戶的局部更新,文檔被修改了並不要緊。例如,兩個進程都要增加頁面瀏覽量,增加的順序我們並不關心——如果衝突發生,我們唯一要做的僅僅是重新嘗試更新既可。

 

正文

 

1: ES使用樂觀鎖,即版本號策略來保證數據一致性

PUT /test_index/test_type/6

{

"test_field": "test test"

}

 

{

"_index": "test_index",

"_type": "test_type",

"_id": "6",

"_version": 1,

"result": "created",

"_shards": {

"total": 2,

"successful": 1,

"failed": 0

},

"created": true

}

ES內部維護了version的遞增策略!!!

第一次創建一個document的時候,它的_version內部版本號就是1;以後,每次對這個document執行修改或者刪除操作,都會對這個_version版本號自動加1;哪怕是刪除,也會對這條數據的版本號加1。

注意,在刪除一個document之後,可以從一個側面證明,它不是立即物理刪除掉的,因爲它的一些版本號等信息還是保留着的。先刪除一條document,再重新創建這條document,其實會在delete version基礎之上,再把version號加1.。@hxx,刪除一個文檔後,這個文檔會默認保留60s的版本信息,防止在短時間內的併發更新成功。超過60s後可以隨意更新,夠用了,可以通過index.gc_deletes修改這個閾值。 這個有可能是ttl實現的!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章