Lucene二階段提交

2021-09-17 21:09:49 字數 555 閱讀 9749

indexwirter繼承了twophasecommit介面,實現三個方法:preparecommit,commit與rollback

二階段提交只是一種選擇, 在通常情況下, 只需要定時呼叫commit()方法做hardcommit即可. 如果有分布式需求做版本控制等, 可能會需要二階段提交

lucene自身並未實現事務日誌,但在更高層上可以方便實地現。例發,solr與elasticsearch就實現了事務日誌。

幾種情況:

a. 不使用commit(), 不會生成segment檔案, 不可讀; 如果達到flush的閾值會進行寫tim tip,doc,pay等檔案(是持久化寫),但不會有segment檔案生成, 換言之,flush也會產生磁碟io,但是其事務不會提交, 不會被其他indexreader讀取到

b. 使用preparecommit(), 會生成segment檔案, 不可讀

c. 使用close(), 會生成segment檔案, 可讀

d. 使用close(), 並且設定config.setcommitonclose(false), 不會生成segment檔案, 不可讀

二階段提交協議,三階段提交協議

其實三者都是為了解決分布式一致性問題而存在的協議和演算法。首先先來了解幾個概念。協調者 coordinator 在分布式系統中,當事務操作需要跨越多個分布式節點的時候,為了保持分布式處理的acid特性,需要引入它來統一排程所有節點的執行邏輯。參與者 participant 協調者排程的這些節點就是參...

分布式事務 二階段提交與三階段提交

一 二階段提交演算法描述 在分布式系統中,事務往往包含有多個參與者的活動,單個參與者上的活動是能夠保證原子性的,而多個參與者之間原子性的保證則需要通過兩階段提交來實現,兩階段提交是分布式事務實現的關鍵。很明顯,兩階段提交保證了分布式事務的原子性,這些子事務要麼都做,要麼都不做。而資料庫的一致性是由資...

分布式事務 二階段提交與三階段提交

一 二階段提交演算法描述 在分布式系統中,事務往往包含有多個參與者的活動,單個參與者上的活動是能夠保證原子性的,而多個參與者之間原子性的保證則需要通過兩階段提交來實現,兩階段提交是分布式事務實現的關鍵。很明顯,兩階段提交保證了分布式事務的原子性,這些子事務要麼都做,要麼都不做。而資料庫的一致性是由資...