Elasticsearch核心技術與實戰學習筆記 44 | 處理併發讀寫操作

一 序

   本文屬於極客時間Elasticsearch核心技術與實戰學習筆記系列。

二 併發控制的必要性

 兩個 Web 程序同時更新某個文檔,如果缺乏有效的併發,會導致更改的數據丟失
悲觀併發控制

  • 假設有變更衝突的可能,會對資源加鎖,防止衝突。例如數據庫行鎖

樂觀併發控制

  • 假設突然是不會發生的,不會阻塞正在嘗試的操作。如果數據在讀寫中被修改,更新將會失敗。應用程序決定如何解決衝突,例如重試更新,使用新的數據,或者將錯誤報告給用戶
  • ES 採用的樂觀併發控制

例子是舉了銷售商品扣減庫存的。

2.1 ES 的樂觀併發控制

ES 中的文檔是不可變更的。如果你更新一個文檔,會將會文檔標記爲刪除,同時增加一個全新當文檔,同時文檔的 version 字段加 1

內部版本控制(老版本,已經被廢除)

  •  If_seq_no + If_primary_term(推薦)

使用外部版本(使用其他數據庫作爲主要數據存儲)

  • version + version_type = external

demo

數據準備

嘗試去更新:

假設有別的用戶也去更新

會提示錯誤,也就說版本號只能執行一次

如果使用數據庫同步數據的場景,則可以使用version_type的方式更新

 

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