ElasticSearch 併發操作問題

2021-09-12 21:41:23 字數 888 閱讀 5240

解決併發問題

問題的原因是 elasticsearch 不支援 acid 事務。 對單個檔案的變更是 acidic 的,但包含多個文件的變更不支援。

如果你的主要資料儲存是關聯式資料庫,並且 elasticsearch 僅僅作為乙個搜尋引擎 或一種提公升效能的方法,可以首先在資料庫中執行變更動作,然後在完成後將這些變更複製到 elasticsearch。 通過這種方式,你將受益於資料庫 acid 事務支援,並且在 elasticsearch 中以正確的順序產生變更。 併發在關聯式資料庫中得到了處理。

如果你不使用關係型儲存,這些併發問題就需要在 elasticsearch 的事務水準進行處理。 以下是三個切實可行的使用 elasticsearch 的解決方案,它們都涉及某種形式的鎖:

全域性鎖文件鎖

樹鎖

elasticsearch-對併發衝突的解決(樂觀鎖、悲觀鎖)

初識elasticsearch解決併發問題

1. 悲觀鎖

在訪問資料時,先進行加鎖操作,如果有其他程序占有鎖,則操作失敗,等待重試。

鎖的級別上有全域性鎖、文件鎖、樹鎖。

悲觀鎖的優點:方便,直接加鎖,對外透明,不需要額外的操作。

悲觀鎖的缺點:併發能力低,同一時間只能有乙個操作。

2. 樂觀鎖

每次修改文件時,無需加鎖,通過比對文件的version版本號控制順序。

樂觀鎖的優點:併發能力高,不用加鎖。

樂觀鎖的缺點:每次更新資料需要判斷一下版本號,操作複雜,可能需要執行多次(查詢,計算,寫入)操作,直到跟新成功。

** | elasticsearch不支援事務有什麼好的彌補方案嗎?

Elasticsearch 併發修改樂觀鎖

來自 1 elasticsearch 的樂觀鎖,可以使用外部系統提供的版本號 這時elasticsearch將只檢查提供的版本是否比當前儲存在索引中的版本大 大多少不重要 如果是成功,否則失敗。在elasticsearch中,更新請求實際上是分為兩個階段,獲取文件,修改文件,然後儲存文件。那麼當兩個...

Elasticsearch 併發衝突處理機制

在電商場景下,工作流程為 讀取商品資訊,包括庫存數量 使用者下單購買 更新商品資訊,將庫存數減一 如果是多執行緒操作,就可能有多個執行緒併發的去執行上述的3步驟流程,假如此時有兩個人都來讀取商 品資料,兩個執行緒併發的服務於兩個人,同時在進行商品庫存資料的修改。假設庫存為100件 正確的情 況 執行...

elasticsearch配置詳解

elasticsearch的config資料夾裡面有兩個配置檔案 elasticsearch.yml和logging.yml,第乙個是es的基本配置檔案,第二個是日誌配置檔案,es也是使用log4j來記錄日誌的,所以logging.yml裡的設定按普通log4j配置檔案來設定就行了。下面主要講解下e...