HBase是Google的BigTable架构的一个开源实现。但是我个人觉得,要做到充分了解下面两点还是有点困难的:
一 HBase涵盖了BigTable规范的哪些部分?
二 HBase与BigTable仍然有哪些区别?
下面我将对这两个系统做些比较。
在做比较之前,我要指出一个事实:HBase是非常接近BigTable论文描述的东西。撇开一些细微的不同,比如HBase 0.20使用ZooKeeper做它的分布式协调服务,HBase已经基本实现了BigTable所有的功能,所以我下面的篇幅重点落在它们细微的区别上,当然也可以说是HBase小组正在努力改进的地方上。
特性比较
接下来的就是特性比较列表,列表中是BigTable跟HBase的特性比较。有的是一些实现细节,有的是可配置的选项等。让人感到有困惑的是,将这些特性分类很难。
| 特性 |
BigTable |
HBase |
说明 |
| 读 / 写 / 修改的原子性 |
支持,每行 |
支持,每行 |
因为 BigTable 不像关系型数据库,所以不支持事务。最 接近事务的就是让对每行数据访问具有原子性。 HBase 同样实现了”行锁”的 API ,让用户访问数据时给一行或 者几行数据加锁。 |
| 词典顺序的行排序 |
支持 |
支持 |
所有行都按照词典顺序排序 |
| 数据块支持 |
支持 |
支持 |
在数据存储文件中,数据是由更小的数据块构成的。这使从大的存储文件读取数据更快。数据块的大小是可 配置的,典型配置是 64K 。 |
| 数据块压缩 |
支持,按Column Family |
支持,按Column Family |
Google 使用 BMDiff 和 Zippy 做两步处理。 BMDiff 工作得很好是因为存储文件中相邻的 key-value 对的内容经常非常相似。因为数据支持多个版本,几个版本的内容会被排序然后被存在一起,它们之间有很 多相同的内容。或者 row key 也会被用这样的方式处理,比如如果用 URL 来作为row key ,而这些 URL 来自统一个网站,那么 row key 也会有很多相似之 处。 Zippy 使用的是改进的 LZW 算法。 HBase 使用的是 Java 支持的标准的 GZip ,以及一点点 GPL licensed LZO 格式支持。 Hadoop 也有想使用 BMDiff 和 Zippy 的征兆。 |
| Column Family 数量限制 |
最多几百 |
小于 100 |
理论上行数和列数是无限的,可是列族( column family )却不是。这个只是设计上的一些折中考率 . |
| Column Famil命名格式 |
可打印 |
可打印 |
HBase 这样做的主要原因是 Column Famil 的名称会被作为文件 系统中的目录名称 |
| Qualifier 命名的格式 |
任意 |
任意 |
任意的字节数组 |
| Key/Value 对的格式 |
任意 |
任意 |
任意的字节数组 |
| 访问控制 |
支持 |
无 |
BigTable 支持 column family 级别的访问控制。 HBase 暂不支持 |
| Cell 多版本 |
支持 |
支持 |
多版本支持是基于时间戳。 版本数目限制可以基于 cloumn family 级别自 由配置 |
| 自定义时间戳 |
支持 |
支持 |
两个系统都支持用户设定时间戳,如果用户不指定,则 使用当前时间作为时间戳。 |
| 数据 TTL |
支持 |
支持< |

文章详细对比了HBase与BigTable在原子性、行排序、数据块、压缩、列族数量、访问控制等多个方面的特性,指出HBase在实现BigTable功能的同时,也有一些不同,如使用ZooKeeper而非Chubby进行分布式协调,以及在数据安全、错误处理和新特性上的差异。HBase正逐步缩小与BigTable的差距,尽管仍有一些功能如客户端隔离和协同处理不被支持。
最低0.47元/天 解锁文章
1775

被折叠的 条评论
为什么被折叠?



