Dav*_*vid 6 indexing hbase lookup-tables database-scan
HBase如何执行查找并检索记录?例如,RDBMS的B树在HBase中的等效项是什么?
[编辑]
我了解HBase如何解析-ROOT-和.META。表格以找出哪个区域保存数据。但是如何执行本地查找?
为了更好地说明,这是一个示例:
RegionServer X如何找出记录77的位置?
RegionServer是否使用某种查找表(例如RDBMS的B树)作为区域的键?还是需要读取StoreFiles的所有内容(记录从50到77)?
TL; DR:它看起来像HBase(例如BigTable),用作类似于B +树的结构来进行查找。因此,行键是主索引(默认情况下是HBase中唯一的任何索引)。
长答案:从这篇关于HBase写路径的Cloudera博客文章中,看起来HBase的运行方式如下:
每个HBase表由服务器集托管和管理,服务器分为三类:
- 一台活动主服务器
- 一台或多台备份主服务器
- 许多区域服务器
区域服务器有助于处理HBase表。由于HBase表可能很大,因此将它们分解为称为区域的分区。每个区域服务器处理一个或多个这些区域。
下一段有更多详细信息:
由于行键已排序,因此很容易确定哪个区域服务器管理哪个键。...每个行键都属于一个特定的区域,该区域由区域服务器提供服务。因此,基于放置或删除的密钥,HBase客户端可以找到适当的区域服务器。首先,它从ZooKeeper仲裁中找到托管-ROOT-区域的区域服务器的地址。客户端从根区域服务器中找出托管-META-区域的区域服务器的位置。然后,我们最终从元区域服务器中找到为所请求区域提供服务的实际区域服务器。这是一个三步过程,因此会缓存区域位置,以避免执行此一系列昂贵的操作。
在另一篇Cloudera博客文章中,看起来用于将HBase保存在文件系统上的确切格式一直在变化,但是上述行键查找机制应或多或少保持一致。
这种机制与Google BigTable的查找非常相似(您可以在PDF的第4页末尾的第5.1节中找到详细信息),该机制使用三级层次结构来查询行键位置:Chubby->根片-> METADATA片->实际片
更新:回答有关区域服务器内部查找的问题:我不确定,但是由于行键已排序,并且HBase知道开始键和结束键,我怀疑它使用了二进制搜索或内插搜索,两者都非常快-分别为log(n)和log(log(n))。我认为HBase不需要从起始行键到需要查找的键扫描行,因为对排序键的搜索是众所周知的问题,它具有多种有效的解决方案。
| 归档时间: |
|
| 查看次数: |
3408 次 |
| 最近记录: |