HBase 的表结构

2016-10-13 杜亦舒

HBase 是一个NoSQL数据库,用于处理海量数据,可以支持10亿行百万列的大表,下面就了解一下数据是如何存放在HBase表中的

关系型数据库的表结构

为了更好的理解HBase表的思路,先回顾一下关系数据库中表的处理方式

例如有一个用户表user_info,有字段:id、name、tel,表名字段需要在建表时指定

create table user_info (

id 类型,

name 类型,

tel 类型

)

然后插入两条数据

insert into user_info values(...)

表结构

id

name

tel

1

小明

123

2

小王

456

后来字段不够用了,新用户需要记录地址,就要新增一个字段

id

name

tel

addr

1

小明

123

 

2

小王

456

 

以后再增加需求时,就继续新增字段,或者添加一个扩展表

上面的内容主要说明的是:

  • 建表的方式,需提前指定表名和字段
  • 插入记录的方式,指定表名和各字段的值
  • 数据表是二维结构,行和列
  • 添加字段不灵活

下面看一下HBase的处理方式

HBase的表结构

建表时要指定的是:表名、列族

建表语句

create 'user_info', 'base_info', 'ext_info'

意思是新建一个表,名称是user_info,包含两个列族base_info和ext_info

列族 是列的集合,一个列族中包含多个列

这时的表结构:

row key

base_info

ext_info

...

...

...

row key 是行键,每一行的ID,这个字段是自动创建的,建表时不需要指定

插入一条用户数据:name为‘a’,tel为‘123’

插入语句

put 'user_info', 'row1', 'base_info:name', 'a'

put 'user_info', 'row1', 'base_info:tel', '123'

意思是向user_info表中行健为row1的base_info列族中添加一项数据 name:a,接着又添加一项数据tel:123

name和tel就是具体字段,属于base_info这个列族

这时的表结构:

row key

base_info

ext_info

row1

name:a, tel:123

 

再插入一条数据:name为‘b’,addr为‘beijing’

put 'user_info', 'row2', 'base_info:name', 'b'

put 'user_info', 'row2', 'ext_info:addr', 'bj'

这时的表结构:

row key

base_info

ext_info

row1

name:a, tel:123

 

row2

name:b

addr:bj

HBase表中还有一个重要概念:版本,每个字段的值都有版本信息(通过时间戳指定)

例如 base_info:name,每次修改时都会保留之前的值,就是说可以取到他的旧值

row key

base_info

ext_info

row1

name:a, tel:123

 

row2

name:c(v2)[name:b(v1)]

addr:bj

小结

从上面建表、插入数据的过程可以看出 HBase 存储数据的特点了

  • 和关系数据库一样,也是使用行和列的结构
  • 建表时,定义的是表名和列族(字段的集合),而不是具体字段
  • 列族中可以包含任意个字段,字段名不需要预定义,每一行中同一列族中的字段也可以不一致
  • 多维结构,关系数据库的表是二维的,通过指行、列定位一个数据,HBase中需要通过 行健、列族名、字段名、版本号才能定位到具体数据
  • 插入数据时,一次插入一个字段的数据,不是像关系数据库那样一次插入多个字段

写留言

HBase 的表结构的更多相关文章

  1. HBase的表结构

    HBase以表的形式存储数据.表有行和列组成.列划分为若干个列族/列簇(column family).  如上图所示,key1,key2,key3是三条记录的唯一的row key值,column-fa ...

  2. 怎样将关系型数据表转换至hbase数据表

    首先须要把关系型数据库的数据表的数据添加由 "纵向延伸",转变为HBase数据表的"横向延伸" 一.Hbase的存储结构 a)      HBase以表(HTa ...

  3. HBase-修改表结构

    HBase修改表结构 package com.hbase.HBaseAdmin; import java.io.IOException; import org.apache.hadoop.conf.C ...

  4. Hbase之修改表结构

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...

  5. HBase -ROOT-和.META.表结构

    在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer.什么叫相应的RegionServer?就是管理你要操 ...

  6. hbase meta表的结构

    下面看下hbase:meta 表的结构,hbase:meta表中,保存了每个表的region地址,还有一些其他信息,例如region的名字,HRegionInfo,服务器的信息.hbase:meta表 ...

  7. 4 hbase表结构 + hbase集群架构及表存储机制

      本博文的主要内容有    .hbase读取数据过程 .HBase表结构 .附带PPT http://hbase.apache.org/ 读写的时候,就需要用hbase了,换句话说,就是读写的时候. ...

  8. HBase -ROOT-和.META.表结构(region定位原理)

    在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer.什么叫相应的RegionServer?就是管理你要操 ...

  9. hbase表结构 + hbase集群架构及表存储机制

    本博文的主要内容有    .hbase读取数据过程 .HBase表结构 .附带PPT http://hbase.apache.org/ 读写的时候,就需要用hbase了,换句话说,就是读写的时候.需要 ...

随机推荐

  1. Overview of the Oppia codebase(Oppia代码库总览)

    Oppia is built with Google App Engine. Its backend is written in Python, and its frontend is written ...

  2. JVM内存结构---《深入理解Java虚拟机》学习总结

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域的用途各不相同,同时也依据着各自的执行规则,独立的创建和销毁数据. 虚拟机内存的划分,如图所示: 线程之间 ...

  3. Java多线程开发系列之四:玩转多线程(线程的控制1)

    在前文中我们已经学习了:线程的基本情况.如何创建多线程.线程的生命周期.利用已有知识我们已经可以写出如何利用多线程处理大量任务这样简单的程序.但是当应用场景复杂时,我们还需要从管理控制入手,更好的操纵 ...

  4. Hadoop: Hadoop Cluster配置文件

    Hadoop配置文件 Hadoop的配置文件: 只读的默认配置文件:core-default.xml, hdfs-default.xml, yarn-default.xml 和 mapred-defa ...

  5. MongoDB - 在Windows上安装

    1 下载MongoDB社区版, 下载链接 http://www.mongodb.org/downloads?_ga=1.129742796.1997610832.1481940266 2 安装Mong ...

  6. var ball0=new Ball("executing") 是怎样被执行的?

    function Ball(message){ alert(message); }; var ball0=new Ball("executing"); //var ball0=ne ...

  7. 分享前端Facebook及Twitter第三方登录

    最近公司要求做海外的第三方登录:目前只做了Facebook和Twitter;国内百度到的信息太少VPN FQ百度+Google了很久终于弄好了.但是做第三方登录基本上都有个特点就是引入必须的js,设置 ...

  8. AsyncTask 异步处理

    1 package com.ch.day8_asynctaskdemo; 2 3 import java.util.ArrayList; 4 5 import com.ch.myutils.NetWo ...

  9. Socket TCP之keepalive

    摘自: http://machael.blog.51cto.com/829462/211989/

  10. Xcode8 适配iOS10时遇见的一些问题

    1.证书管理 用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书.建议大家勾选这个Automatically manage signing(Ps.但是在bea ...