HBase使用主索引吗?

时间:2012-10-16 06:54:11

标签: indexing hbase lookup-tables database-scan

HBase如何执行查找并检索记录? 例如,对于RDBMS的B树,HBase中的等价物是什么?

[编辑]

我理解HBase如何解析-ROOT-和.META。用于查找哪个区域包含数据的表。但是如何执行本地查找?

为了更好地说明,这是一个例子:

  1. 我正在使用键77开始搜索(获取或扫描)以进行记录。
  2. HBase客户端表示该密钥包含在50-100区域中, 由RegionServer X持有。
  3. HBase客户端联系RegionServer X以获取数据。
  4. RegionServer X如何找出记录77的位置?

    RegionServer是否使用某种查找表(例如RDBMS的B-Trees?)作为区域的键? 或者是否需要读取StoreFiles的所有内容,以获取50到77的记录?

1 个答案:

答案 0 :(得分:4)

TL; DR:它看起来像HBase(如BigTable),用作类似于B +树的结构来进行查找。因此,行键是主索引(默认情况下是HBase中任何排序的唯一索引。)

答案很长:Cloudera blog post about HBase write path开始,看起来HBase的操作方式如下:

  

每个HBase表都由多组服务器托管和管理   分为三类:

     
      
  • 一个活动的主服务器
  •   
  • 一个或多个备用主服务器
  •   
  • 许多区域服务器
  •   
     

区域服务器有助于处理HBase表。因为HBase   表可以很大,它们被分成称为的分区   区域。每个区域服务器处理一个或多个这些区域。

下一段还有一些细节:

  

由于行键已排序,因此很容易确定哪个区域   服务器管理哪个密钥。 ...每行键属于特定的   由区域服务器提供服务的区域。所以基于put或   删除密钥,HBase客户端可以找到适当的区域服务器。在   首先,它找到托管-ROOT-的区域服务器的地址   ZooKeeper法定人数的区域。从根区域服务器,   客户端找出托管-META-的区域服务器的位置   区域。从元区域服务器,然后我们终于找到了   服务于请求区域的实际区域服务器。这是一个   三步过程,因此缓存区域位置以避免这种情况   昂贵的一系列操作。

another Cloudera blog post开始,看起来用于在文件系统上保存HBase的确切格式不断变化,但上述行键查找机制应该或多或少地保持一致。

这种机制与Google BigTable's lookup非常非常相似(您将在PDF的第4页末尾开始的第5.1节中找到详细信息),它使用三级层次结构来查询行键位置:胖乎乎的 - >根片剂 - > METADATA片剂 - >实际的平板电脑

更新:回答有关Region Server内部查找的问题:我不确定,但由于行键已排序,HBase知道开始和结束键,我怀疑它使用{{3或者binary search,两者都非常快 - 分别是log(n)和log(log(n))。我不认为HBase需要扫描从开始行键到需要查找的行,因为对已排序键的搜索是众所周知的问题,有几个有效的解决方案。