HBase如何执行查找并检索记录? 例如,对于RDBMS的B树,HBase中的等价物是什么?
[编辑]
我理解HBase如何解析-ROOT-和.META。用于查找哪个区域包含数据的表。但是如何执行本地查找?
为了更好地说明,这是一个例子:
RegionServer X如何找出记录77的位置?
RegionServer是否使用某种查找表(例如RDBMS的B-Trees?)作为区域的键? 或者是否需要读取StoreFiles的所有内容,以获取50到77的记录?
答案 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需要扫描从开始行键到需要查找的行,因为对已排序键的搜索是众所周知的问题,有几个有效的解决方案。