您好,登錄后才能下訂單哦!
這篇文章主要講解了“HBase是怎么做到毫秒級查詢的”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“HBase是怎么做到毫秒級查詢的”吧!
1. 緩存
HBase有兩塊主要的內存緩存,MemStore 和 BlockCache。
具體的過程如下:
一個查詢過來 regionserver 后首先用 MemStoreScanner 搜索 MemStore 里是否有所查的 rowKey ,這一步在內存中,所以是很快的。
如果不在 memstore 中,會經過一系列的索引尋址會定位到 block 的位置。
如果 block 在 BlockCache 緩存中則可以直接在內存中操作,速度很快,不需要再進行一次 IO 將整個 block 讀取到內存中。
2. 過濾
RegionServer 啟動的時候就會把每個HFile的起止 rowkey 加載到內存中,在定位 HFile 的時候可以過濾掉大部分HFile;
同時同樣是加載到內存的 Bloom Block 也會通過之前說的 bloomFilter 也會過濾掉大部分一定不包含所查rowKey的HFile。
3. 索引
經過了上面的過濾,其實只剩下很少一部分的HFile需要去檢索了,HBase有三級索引,第一級索引會常駐內存,二三級的索引會以block的形式存在HFile中。
索引相關更細節的東西可以看下這篇 HBase篇(4)-你不知道的HFile
另外可以提一下,因為HBase是多版本共存的,所以結果可能是會有多個的,因此檢索的過程不是找到一個就返回了,而是要找到所有的,然后將結果合并。
HBase的各個角色之間是怎么協調工作的?
先說說Hbase主要包含的角色: HMaster/HRegionServer/Zookeeper
1. HRegionServer
負責實際數據的讀寫. 當訪問數據時, 客戶端最終會直接與 RegionServer 通信。HBase的表根據Row Key的區域分成多個Region, 一個Region包含這這個區域內所有數據. 而Region server負責管理多個Region, 負責在這個Region server上的所有region的讀寫操作.
2. HMaster
負責管理Region的位置, DDL(新增和刪除表結構);
協調 RegionServer,在集群處于數據恢復或者動態調整負載時,分配Region到某一個 RegionServer 中;
管控集群,監控所有 Region Server 的狀態;
提供DDL相關的API, 新建(create),刪除(delete)和更新(update)表結構;
3. Zookeeper
負責維護和記錄整個Hbase集群的狀態。
zookeeper探測和記錄Hbase集群中服務器的狀態信息.如果zookeeper發現服務器宕機,它會通知Hbase的master節點。master 節點宕機,則會通知 backup 變成 master。
說說 HBase 的 LSM Tree?
LSM Tree即是日志結構合并樹。
先說日志結構:
日志的特點是它是順序追加寫的,可以保證非常好的寫操作性能,但是從日志文件中讀一些數據將會比寫操作需要更多的時間,需要倒序掃描,直接找到所需的內容。
LSM tree是通過把隨機寫的數據寫到內存,然后定期flush到磁盤,對于磁盤來說,讓所有的操作順序化,而不是隨機讀寫。
再說說合并樹:
LSM Tree的原理是把一棵大樹拆分成N棵小樹,它首先寫入內存中即是小樹,隨著小樹越來越大,會flush到磁盤中,磁盤中的樹定期可以做merge操作,合并成一棵大樹,以優化讀性能。
感謝各位的閱讀,以上就是“HBase是怎么做到毫秒級查詢的”的內容了,經過本文的學習后,相信大家對HBase是怎么做到毫秒級查詢的這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。