日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch 并发的处理方式:锁和版本控制_07

發(fā)布時(shí)間:2024/9/27 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch 并发的处理方式:锁和版本控制_07 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

            • 現(xiàn)象
            • 版本控制
            • 最新方案

現(xiàn)象

當(dāng)我們使用 es 的 API 去進(jìn)行文檔更新時(shí),它首先讀取原文檔出來,然后對(duì)原文檔進(jìn)行更新,更新完成后再重新索引整個(gè)文檔。不論你執(zhí)行多少次更新,最終保存在 es 中的是最后一次更新的文檔。但是如果有兩個(gè)線程同時(shí)去更新,就有可能出問題。

要解決問題,就是鎖。

  • 悲觀鎖

很悲觀,每一次去讀取數(shù)據(jù)的時(shí)候,都認(rèn)為別人可能會(huì)修改數(shù)據(jù),所以屏蔽一切可能破壞數(shù)據(jù)完整性的操作。關(guān)系型數(shù)據(jù)庫中,悲觀鎖使用較多,例如行鎖、表鎖等等。

  • 樂觀鎖

很樂觀,每次讀取數(shù)據(jù)時(shí),都認(rèn)為別人不會(huì)修改數(shù)據(jù),因此也不鎖定數(shù)據(jù),只有在提交數(shù)據(jù)時(shí),才會(huì)檢查數(shù)據(jù)完整性。這種方式可以省去鎖的開銷,進(jìn)而提高吞吐量。

在 es 中,實(shí)際上使用的就是樂觀鎖。

版本控制

es6.7之前

在 es6.7 之前,使用 version+version_type 來進(jìn)行樂觀并發(fā)控制。根據(jù)前面的介紹,文檔每被修改一個(gè),version 就會(huì)自增一次,es 通過 version 字段來確保所有的操作都有序進(jìn)行。

version 分為內(nèi)部版本控制和外部版本控制。

  • 內(nèi)部版本
    es 自己維護(hù)的就是內(nèi)部版本,當(dāng)創(chuàng)建一個(gè)文檔時(shí),es 會(huì)給文檔的版本賦值為 1。

每當(dāng)用戶修改一次文檔,版本號(hào)就回自增 1。

如果使用內(nèi)部版本,es 要求 version 參數(shù)的值必須和 es 文檔中 version 的值相當(dāng),才能操作成功。

  • 外部版本
    也可以維護(hù)外部版本。

在添加文檔時(shí),就指定版本號(hào):

PUT blog/_doc/1?version=200&version_type=external {"title":"2222" }

以后更新的時(shí)候,版本要大于已有的版本號(hào)。

vertion_type=external 或者 vertion_type=external_gt 表示以后更新的時(shí)候,版本要大于已有的版本號(hào)。
vertion_type=external_gte 表示以后更新的時(shí)候,版本要大于等于已有的版本號(hào)。

最新方案

(Es6.7 之后)
現(xiàn)在使用 if_seq_no 和 if_primary_term 兩個(gè)參數(shù)來做并發(fā)控制。

seq_no 不屬于某一個(gè)文檔,它是屬于整個(gè)索引的(version 則是屬于某一個(gè)文檔的,每個(gè)文檔的 version 互不影響)。現(xiàn)在更新文檔時(shí),使用 seq_no 來做并發(fā)。由于 seq_no 是屬于整個(gè) index 的,所以任何文檔的修改或者新增,seq_no 都會(huì)自增。

現(xiàn)在就可以通過 seq_no 和 primary_term 來做樂觀并發(fā)控制。

PUT blog/_doc/2?if_seq_no=5&if_primary_term=1 {"title":"6666" } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的ElasticSearch 并发的处理方式:锁和版本控制_07的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。