日期:2014-05-16 浏览次数:20603 次
最近关注 Hadoop ,因此 也顺便关注了一下 Hadoop相关的项目 。 HBASE就是基于 Hadoop的一个开源项目,也是对 Google的 BigTable的一种实现。
? ?? ? BigTable是什么?
Google的
Paper对其作了充分的说明。字面上看就是一张大表,其实和我们想象的传统数据
库的表还是有些差别的。松散数据可以说是介于
Map
Entry(
key & value)和
DB
Row之间的一种数据。在我使用
Memcache的时候,有时候的需求是需要存储的不仅仅是简单的一个
key对应一个
value,可能我需要类似于数据库表结构中多属性的存储,但是又不会有传统数据库表结构中那么多关联关系的需求,其实这类数据就是所谓的
松散数据。
BigTable最浅显来看就是一张很大的表,表的属性可以根据需求去动态增加,但是又没有
表与表之间关联查询的需求。
? ?? ? 互联网应用有一个最大的特点,就是速度,功能再强大,速度慢,还是会被舍弃。因此在大访问量的网站都采
取前后的缓存来提升性能
和响应时间。对于
Map Entry类型的数据,集中式分布式
Cache都有很多选择,对于传统的关系型数据,从
MySQL
到
Oracle都给了很好的支持,唯有松散数据这类数据,采用前后两种解决方案都不能最大化它的处理能力。因此
BigTable才有了它用武之地。
? ?? ? HBASE作为
Apache的开源项目,也是出于起
步阶段,因为其实它所依赖的
Hadoop也不能说已经到了成熟阶段,所以都有很大的发展空间,这也为我
们这些开源爱好者提供了更多空间去贡献。这里主要会谈到
HBASE的框架设计方面的知识和它的一些特
点,不论是否采用
HBASE去解决工作中的问题
,一种好的流程设计总会给开发者和架构
设计者带来一些思想上的火花。
HBASE
设计介绍
数据模型
? ?? ? HBASE中的每一张表,就是所谓的
BigTable。
BigTable会存储一系列的行记录,行记录有三个基本类型的定义:
Row Key,Time Stamp,Column。
Row Key是行在
BigTable中的唯一标识,
Time Stamp是每次数据操作对应关联的时间戳,可以看作
类似于
SVN的版本,
Column定义为:
<family>:<label>,通过这两部分可以唯一的指定一个数据的存储列,
family的定义和修改需
要对
HBASE作类似于
DB的
DDL操作,而对于
label的使用,则不需要定义直接可以使用,这也为动态定制列
提供了一种手段。
family另一个作用其实在于物理存储优化读写操作,同
family的数据物理上保存的会比较临近,因此在业务设计的过程中可以利用这个特性。
看一下逻辑数据模型:
Row Key |
Time Stamp |
Column "contents:" |
Column "anchor:" |
Column "mime:" |
|
"com.cnn.www" |
t9 |
"anchor:cnnsi.com" |
"CNN" |
||
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|