求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
我眼中的HBase (入门理解)
 

作者:otong ,发布于2012-12-11,来源:CSDN

 

上网Google了下什么是HBase,下面说一下,我的初步的理解。

u 基本概念:

什么是HBase?

HBase(Hadoop Database): 首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式。

数据模型?

数据模型类似于Google的BigTable.Bigtable是一个疏松的分布式的持久的多维排序的map,这个map被行键,列键,和时间戳索引.每一个值都是连续的byte数组

HBase使用和Bigtable非常相同的数据模型.用户存储数据行在一个表里.一个数据行拥有一个可选择的键和任意数量的列.表是疏松的存储的,因此用户可以给行定义各种不同的列.

实质上,HBase和BigTable是个map.相同于数组(PHP),词典(Pyhton),Hash(Ruby)或者Object (Javascript)中的表现形式.

所以每一行是一个map,这个map中还可以有多个map(基于列组).获取一个数据就像你从map中获取数据一样.给定一个行名(即从这个map中获取数据),然后给定一个key(列组名+限定词)来取得数据.

u 一个例子:

下面我们来看个例子:

HBase是在分布式文件系统上构建的,所以他的数据存贮方式是以文件来存放的。

如下表格的数据:

编号
姓名
年龄
身高
1
Tony wa
11
112
2
Jason He
12
132

我们以Jaon格式的数据来表达,是下面的样子 (这里说明了什么是行键)

结构化的表达方式
HBase的表达方式
说明
学员信息{
          {
          “编号”,”1”,
   “姓名”:”Tony wa”,
          “年龄”:”11”,
          “身高”:”112”
           },
          {
          “编号”,”2”,
  “姓名”:”Jason He”,
          “年龄”:”12”,
          “身高”:”132”
           }
学员信息{
          “1”: {
    “姓名”:”Tony wa”,
            “年龄”:”11”,
            “身高”:”112”
           },
          “2”:{
    “姓名”:”Jason He”,
            “年龄”:”12”,
            “身高”:”132”
           } 
HBase的Jason格式中,我们看到整个数据结构是一个map,并且map中每一个key对应一个包含

”姓名”,
”年龄”,
”身高”
的map.
在这个map中有”1”,”2”两行数据。
用编号作为了行的Key(或者行名),每个Key对应一个包含”姓名”,”年龄”,”身高”的map. 在Hbase的术语中,我们称”姓名”,”年龄”,”身高”为列组。

如果我们需要增加两列数据如下:

编号
姓名
年龄
身高
体重
近视
1
Tony wa
11
112
34
2
Jason He
12
132
50
N/A

传统的方法是增加两列,我们看一下Hbase是如何处理的。

我们以Jaon格式的数据来表达,是下面的样子(这里说明了什么是列键)

结构化的表达方式
HBase的表达方式
说明
学员信息{
  {
  “编号”,”1”
  “姓名”:”Tony wa”
  “年龄”:”11”
  “身高”:”112”
  “体重”:”34
  “近视”:”是”
   }
  {
  “编号”,”2”
  “姓名”:”Jason He”
  “年龄”:”12”
  “身高”:”132”
  “体重”:”50
  “近视”:”N/A
   } 
学员信息{
  “1”: {
  “姓名”:”Tony wa”
  “年龄”: {
“” : ”12”
} 
   “身体情况” : {
   “身高:”112
   “体重:”34
   “近视:”是
   }
  }
 “2”:{
   “姓名”:”Jason He”
   “年龄”:{
“” : ”12”
}
   “身体情况” : {
   “身高:”132
   “体重:”50
  }
 } 
在HBase中一个列组通过限定词或叫做标签使每一个列组能够包含许多的列。
在这个例子中,列组"身体情况"包含三个列:
"身高"
"体重"
“近视”,
列组"年龄"仅仅有一个限定词为空字符窜""的列

当我们向HBase获取数据时,你必须提供完整的列名字"<列组>:<限定词>".
因此上面的例子中行"1"和"2"都包含四个列:
"姓名:",
"年龄:",
"身体情况:身高",
"身体情况:体重"
在行中列组是固定的,但是同一个列中限定词可以是不同的,就像行"
2"中列组"身体情况"中只有二个列。(没有”近视”列)
注意:对于学员Jason he由于不需要近视情况,所以也不需要保存
一个空信息,这点不像SQL server必需保存一个空信息。

最后的维度是时间戳(timestamp).所有的在HBase中存储的数据都有一个用时间戳表示的版本或者你自己通过指定时间戳来插入或获取数据。

还是以上面的例子来说明,(对于传统方式,如果要加时间戳的话,要相应的增加行这里我就不写了,只说明HBASE的表达方法。(这里说明了什么是时间戳)

结构化的表达方式
HBase的表达方式
说明
学员信息{
  {
  “编号”,”1”
  “姓名”:”Tony wa”
  “年龄”:”11”
  “身高”:”112”
  “体重”:”34
  “近视”:”是”
   }
  {
  “编号”,”2”
“姓名”:”Jason He”
  “年龄”:”12”
  “身高”:”132”
  “体重”:”50
  “近视”:”N/A
   }
学员信息{
   “1”: {
“姓名”:”Tony wa”
   “年龄”: {
“” : ”12”
} 
   “身体情况” : {
      “身高:” {
        10: 112,
         8: 110,
         5: 108
},               
     “体重:”34
     “近视:”是
      }
    }
    “2”:{
 “姓名”:”Jason He”
      “年龄”:{
“” : ”12”
}
    “身体情况” : {
       “身高:”132
       “体重:”50
        }
    }
每一个列可以指定多少版本的数据被保存在每一个单元.在上面的例子中行"1"的列 "身体情况:身高", 包含三个倒序时间戳排列的数据10,8和5. 一般的应用程序只是简单(不通过时间戳)的请求一个单元的数据.在这种条件下,HBase只是简单地返回最新的版本,即时间戳最大的版本.要获取"身体情况:身高":"返回"112".如果应用程序在一个行中请求时带上时间戳,HBase将会返回小于或等于请求时间戳的数据.接着上面的例子如果程序请求"身体情况:身高"带上时间戳10,返回"112",加上时间戳5,返回110,加上时间戳3,返回null

总结:

HBase中,每一个行可以多个列族,每一个列族可以包含无数个列,每一个列都可以有一个不同于其他列的时间戳.

行中列组是固定的,但是同一个列中限定词可以是不同的。

在通用数据库中当表创建时我们就已经定义了列,如果修改表结构的话会非常困难(比如:添加一列).在HBase中我们可以很轻松地添加一个列族或列.

下面我们以表格方式说明对比传统的结构化存贮和HBase的非结构化存贮的不同

结构化的表达方式
学员表
编号
姓名
年龄
身高
体重
近视
1
Tony wa
11
112
34
2
Jason He
12
132
50
HBase的表达方式
记住:行中列组是固定的,但是同一个列中限定词可以是不同的。
相关文章 相关文档 相关视频



我们该如何设计数据库
数据库设计经验谈
数据库设计过程
数据库编程总结
数据库性能调优技巧
数据库性能调整
数据库性能优化讲座
数据库系统性能调优系列
高性能数据库设计与优化
高级数据库架构师
数据仓库和数据挖掘技术
Hadoop原理、部署与性能调优
 
分享到
 
 


MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...