MVCC(Multi Version Consistency Control),簡(jiǎn)單地說(shuō),是一種通過(guò)數(shù)據(jù)的多版本來(lái)解決讀寫一致性問(wèn)題的解決方案。我們知道 HBase 是會(huì)保留多版本的數(shù)據(jù)的,每次寫入都會(huì)產(chǎn)生一個(gè)新版本的數(shù)據(jù),每次讀取都會(huì)默認(rèn)讀最新版本的數(shù)據(jù),那么 HBase 是在并發(fā)請(qǐng)求的場(chǎng)景下是怎么控制這些多版本的呢?下面是對(duì)HBase的MVCC多版本并發(fā)機(jī)制的具體介紹。
如圖所示,LinkedList 每個(gè)元素里面有兩個(gè)屬性:
writeNumber:即 Region 級(jí)別的事務(wù) ID,每個(gè)客戶端請(qǐng)求都會(huì)分配一個(gè)事務(wù) ID。
completed: 數(shù)據(jù)寫入是否完成,初始狀態(tài)為 Flase,數(shù)據(jù)寫入成功后會(huì)更新為 True。
客戶端寫入事務(wù)請(qǐng)求到達(dá) Region,先寫入到 LinkedList 中,10 是當(dāng)前事務(wù)的 ID,F(xiàn)alse 表示當(dāng)前事務(wù)還在進(jìn)行中,數(shù)據(jù)還不可讀。
Client 將數(shù)據(jù)寫入 memstore 和 WAL ,寫入完成即可結(jié)束事務(wù)。
將 completed 更新為 true,表示事務(wù)結(jié)束。
同時(shí),Client 會(huì)按順序遍歷 LinkedList 里的元素,若 completed:true 則將 readPoint 更新到這個(gè)位置,說(shuō)明此處的數(shù)據(jù)是可讀的,遍歷到 completed:false 則停止。
此時(shí)數(shù)據(jù)寫入還不會(huì)返回成功,即事務(wù) 10 還是不可讀的狀態(tài),因?yàn)樾枰WC時(shí)序,client2 和 3 還在寫事務(wù) 7 和 9 沒(méi)有完成,當(dāng)前可讀的數(shù)據(jù)只到事務(wù) 6 的位置。等到 client2 和 3 完成事務(wù)并將 readPoint 更新到 10,則事務(wù) 10 返回寫入成功,數(shù)據(jù)可讀。
更多關(guān)于大數(shù)據(jù)培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項(xiàng)目實(shí)操的話可以點(diǎn)擊咨詢課程顧問(wèn),獲取試聽(tīng)資格來(lái)試聽(tīng)我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。
注:本文部分文字和圖片來(lái)源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系刪除。版權(quán)歸原作者所有!