W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
HBase引入了一致性定義,可以根據(jù)讀取操作(獲取或掃描)提供一致性定義。
public enum Consistency {
STRONG,
TIMELINE
}
Consistency.STRONG是HBase提供的默認一致性模型。如果表的區(qū)域復制為1,或者在具有區(qū)域副本的表中,但是讀取是以此一致性完成的,則讀取總是由主區(qū)域執(zhí)行,以便與先前的行為不會發(fā)生任何變化,并且客戶端總是觀察最新的數(shù)據(jù)。
如果執(zhí)行讀取操作Consistency.TIMELINE,則讀取的RPC將首先發(fā)送到主要區(qū)域服務(wù)器。在很短的時間間隔(hbase.client.primaryCallTimeout.get默認為10ms)之后,如果主服務(wù)器沒有響應(yīng),則也會發(fā)送用于輔助區(qū)域副本的并行RPC。在此之后,結(jié)果將從首先完成的RPC中返回。如果響應(yīng)從主區(qū)域副本返回,則我們始終可以知道數(shù)據(jù)是最新的。為此,Result.isStale()API已被添加到檢查失效。如果結(jié)果來自輔助區(qū)域,則Result.isStale()將被設(shè)置為true。然后用戶可以檢查該字段,以便了解有關(guān)數(shù)據(jù)的可能原因。
就語義而言,HBase實現(xiàn)的TIMELINE一致性與這些方面的純粹最終一致性不同:
為了更好地理解TIMELINE語義,讓我們看看上面的圖。假設(shè)有兩個客戶端,第一個客戶端首先寫入x=1,然后x=2和x=3。如上所述,所有寫入都由主區(qū)域副本處理。寫入保存在預寫日志(WAL)中,并異步復制到其他副本。在上圖中,請注意replica_id=1收到2次更新,其數(shù)據(jù)顯示x=2,而replica_id=2只收到一次更新,其數(shù)據(jù)顯示x=1。
如果client1以STRONG一致性讀取,它只會與replica_id=0進行通信,因此保證觀察x=3的最新值。如果客戶端發(fā)出TIMELINE一致性讀取,則RPC將轉(zhuǎn)到所有副本(在主超時之后),并且第一個響應(yīng)的結(jié)果將返回。因此,客戶端可以將1,2或3看作x的值。假設(shè)主區(qū)域發(fā)生故障并且日志復制無法持續(xù)一段時間。如果客戶端使用TIMELINE一致性進行多次讀取,則它可以先觀察x=2,然后觀察x=1,依此類推。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: