2012-10-16 60 views
4

HBase如何執行查找並檢索記錄? 例如,關於RDBMS的B-Tree在HBase中等價於什麼?HBase使用主索引嗎?

[編輯]

我理解HBase的是如何解決的-ROOT-和.META。表來找出哪個區域保存數據。但是,本地查詢是如何執行的?

爲了更好地說明,這裏有一個例子:

  1. 我開始搜索(get或掃描),用於記錄與主要77.
  2. HBase的客戶數字,關鍵是包含在50-100區, 通過RegionServer的X.舉行
  3. HBase的客戶聯繫RegionServer的X來獲取數據。

如何RegionServer的X發現記錄77的位置?

是否RegionServer的使用某種類型的查找表(例如像RDBMS的B-樹?)一個區域的鑰匙? 還是需要讀取StoreFiles的所有內容,以獲得50到77的記錄?

回答

4

TL; DR:它看起來像HBase(比如BigTable),它使用類似於B +樹的結構來進行查找。因此,行鍵是主指數

長的答案(和HBase的默認任何形式的唯一指標。):從這Cloudera blog post about HBase write path,它看起來像HBase的工作方法如下:

每個HBase的表託管和由多組落入 分爲三類服務器的管理:

  • 一個活動的主服務器
  • 一個或多個備用主SER VERS
  • 許多區域服務器

地區的服務器有助於處理HBase的表。由於HBase的 表可以很大,他們被分成稱爲 區分區。每個區域服務器處理一個或多個這些區域。

有下一段的一些更詳細:

由於行鍵進行排序,很容易確定哪個區域 服務器管理哪個鍵。 ...每個行密鑰都屬於由區域服務器提供服務的特定 區域。因此,基於看跌期權或 刪除的密鑰,HBase的客戶可以找到一個適當的區域服務器。在 第一,它位於從動物園管理員法定人數託管-ROOT- 區域的區域服務器的地址。從根區域服務器, 客戶端找出承載-META- 區域的區域服務器的位置。從元域服務器,然後我們終於找到 服務於請求區域的實際區域服務器。這是一個 三步過程,所以緩存區域位置以避免這種昂貴的一系列操作。

another Cloudera blog post,它看起來像用來保存HBase的文件系統上不斷變化的確切格式,但對於行鍵查找上面的機制應該或多或少一致。

該機制非常非常類似於Google BigTable's lookup(您可以在PDF上從第4頁的末尾開始,在第5.1節中找到詳細信息),它使用三級水平線查詢行鍵位置:Chubby - > Root tablet - > METADATA平板電腦 - >實際平板電腦

UPDATE:回答有關區域服務器本身內部查找的問題:我不知道,但由於行鍵已排序,HBase知道開始和結束鍵,我懷疑它使用了binary searchinterpolation search,這兩者都非常快 - log(n)和log(log(n))。我不認爲HBase會需要將行從開始行密鑰掃描到需要查找的行,因爲對排序後的密鑰的搜索是衆所周知的問題,有幾個有效的解決方案。

+0

谷歌的「平板電腦」,相當於HBase的「地區」。我明白那一部分。 – David

+0

.META。 hbase中的表只包含每個區域的startRow和StopRow。我的問題是一旦hbase知道要查詢哪個RegionServer,是否需要讀取整個數據文件進行查找? – David

+0

我已更新問題以進行澄清 – David