1.HBase如何保證讀的高效?
緩存
* HBase 有兩塊主要的內(nèi)存緩存,MemStore 和 BlockCache。 * 一個(gè)查詢(xún)過(guò)來(lái) RegionServer 后,首先用 MemStoreScanner 搜索 MemStore 里是否有所查的 rowKey ,這一步在內(nèi)存中,所以是很快的。 * 如果不在 memstore 中,會(huì)經(jīng)過(guò)一系列的索引尋址定位到 Block 的位置。如果 Block 在 BlockCache 緩存中則可以直接在內(nèi)存中操作,速度很快,不需要再進(jìn)行一次 IO 將整個(gè) Block 讀取到內(nèi)存中。
過(guò)濾
* RegionServer 啟動(dòng)的時(shí)候就會(huì)把每個(gè) HFile 的起止 Rowkey 加載到內(nèi)存中,在定位 HFile 的時(shí)候可以過(guò)濾掉大部分 HFile * 加載到內(nèi)存中的Bloom Block也會(huì)通過(guò)BloomFilte也會(huì)過(guò)濾掉大部分一定不包含所查RowKey的HFile。
索引
* 經(jīng)過(guò)了上面的過(guò)濾,其實(shí)只剩下很少一部分的 HFile 需要去檢索了,HBase 有三級(jí)索引,第一級(jí)索引會(huì)常駐內(nèi)存,二三級(jí)的索引會(huì)以 Block 的形式存在 HFile 中。 * 另外因?yàn)?HBase 是多版本共存的,所以結(jié)果可能是會(huì)有多個(gè)的,因此檢索的過(guò)程不是找到一個(gè)就返回了,而是要找到所有的,然后將結(jié)果合并。
2.HBase 如何保證數(shù)據(jù)的強(qiáng)一致性?
HBase 是犧牲了數(shù)據(jù)的部分可用性來(lái)保證它的數(shù)據(jù)強(qiáng)一致性的,即CAP原理中舍棄了一部分的可用性,HBase 是個(gè) CP系統(tǒng)。
* HBase 中每一條數(shù)據(jù)只會(huì)出現(xiàn)在一個(gè) Region,它的數(shù)據(jù)冗余備份不是在 Region 這個(gè)層面做的,還是依賴(lài) HDFS 來(lái)做的冗余。而且同一時(shí)間一個(gè) Region 只會(huì)被分配給一個(gè) RegionServer,這就保證了系統(tǒng)中只會(huì)有一條可以使用的數(shù)據(jù)。HBase 支持行級(jí)事物,即一個(gè) put 操作要么成功,要么失敗。
* 另外當(dāng)有 RegionServer 宕機(jī)的時(shí)候,Region 會(huì)被分配到其他的 RegionServer 上,同時(shí)重寫(xiě) WAL Log,這個(gè)過(guò)程中整個(gè) Region 中的數(shù)據(jù)是不可用的,因?yàn)樗侨笔У?。如果可用性?qiáng)的話那么必定會(huì)有數(shù)據(jù)不一致的問(wèn)題(即寫(xiě)入過(guò)的數(shù)據(jù)查詢(xún)不到),所以這里用可用性來(lái)?yè)Q取了強(qiáng)一致性,等到 WAL 寫(xiě)完,保證了數(shù)據(jù)完整性之后,才可重新訪問(wèn)。
更多關(guān)于“大數(shù)據(jù)培訓(xùn)”的問(wèn)題,歡迎咨詢(xún)千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬(wàn)人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來(lái)試聽(tīng)。