zoukankan      html  css  js  c++  java
  • BigTable/HBase基本概念解读 & Hbase shell常用命令

    转自:http://ptsolmyr.com/2010/12/03/bigtable_hbase/ & http://blog.csdn.net/hongbinchen/article/details/6289279

     http://www.codelast.com/?p=899

    BigTable是Key/Value数据库的元老之一。作为Google平台的主要部件,它相对于其他的K-V store较为复杂。在BigTable论文中,是这样定义的:

    A Bigtable is a sparse, distributed, persistent multidimensional sorted map.

    进一步解释如下:

    The map is indexed by a row key, column key, and a timestamp; each value in the map is an uninterpreted array of bytes.

    HBase则是Apache的一个模仿BigTable的项目,它在自我介绍时也毫不掩饰这一点:

    HBase uses a data model very similar to that of Bigtable. Users store data rows in labelled tables. A data row has a sortable key and an arbitrary number of columns. The table is stored sparsely, so that rows in the same table can have crazily-varying columns, if the user likes.

    这几句话看起来还是有些抽象,下面按下面几个关键字逐个解释一下:map, persistent, distributed, sorted, multi-dimentional, sparse

    map

    从本质上讲,BigTable/HBase是一个map。实际上,所有的K-V store都是一个map。

    persistent

    和其他场景中的persistent一样,这里的意思也是数据在处理完后会被持久化(存储在硬盘上)。

    distributed

    HBase和BigTable都是建立在分布式文件系统之上的,所以它的底层存储可以扩展到一系列机器上。主要目的是为了防止单点失败。

    sorted

    BigTable/HBase中的key-value对是对key严格按字母表顺序排序的。

    对value没有任何排序机制

    在设计key的时候,要考虑让相关的value的key排序位置比较接近。

    multi-dimentional

    multi-dimentional map可以理解为一个values也是map的map。

    BigTable/HBase中的map层次为:

    key: column family: qualifier: timestamp → value

    如下图:

    {

      // …

      "aaaaa" : {

        "A" : {

          "foo" : {

            15 : "y",

            4 : "m"

          },

          "bar" : {

            15 : "d",

          }

        },

        "B" : {

          "" : {

            6 : "w"

            3 : "o"

            1 : "w"

          }

        }

      },

      // …

    }

    在上例中,“aaaaa”是一个key,有两个column family:“A”和“B”,“foo”和“bar”是“A”的qualifier。15,4是两个timestamp,分别对应“y”和“m”这两个value

    column family: qualifier” 构成一个column

    注意,column families不可删改,增加column family的开销也比较大。所以最好是在设计的时候就把column families定死。qualifier可以为空。

    columns是可以修改的,也就是说qualifier的增删改都允许。

    timestamp的默认值是从当前epoch开始计的秒数,也可以是自己选择的一个整数。

    sparse

    首先,每一行可以有任意个数个columns,可以有很多,也可能根本就没有column;

    其次,行与行之间也可能存在空隙(比如空行)。


    Hbase shell 常用命令:

    名称
    命令表达式
    创建表
    create '表名称', '列名称1','列名称2','列名称N'
    添加记录      
    put '表名称', '行名称', '列名称:', '值'
    查看记录
    get '表名称', '行名称'
    查看表中的记录总数
    count  '表名称'
    删除记录
    delete  '表名' ,'行名称' , '列名称'
    删除一张表
    先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步  drop '表名称'
    查看所有记录
    scan "表名称"  
    查看某个表某个列中所有数据
    scan "表名称" , ['列名称:']
    更新记录 
    就是重写一遍进行覆盖

    1. 创建表

     create 'student','name','address'  

     新建student表,该表有两列 名称和地址,名称只有一个,address可以有多个

    2.插入一条记录,只能插入某列

      put 'student','1','name','tom' 

     向student表中插入记录,记录的row值为1,列name的值为tom

    3. 根据row值 查询一条记录

        get 'student','1'

     查询结果:

    COLUMN                       CELL

     name:                       timestamp=1301473112875, value=tom

    4. 根据row值更新name值 (系统会直接更新)

       put 'student','1','name','tom2'

    5.再查询时,系统返回最新的值

      hbase(main):052:0> get 'student','1'

      COLUMN                       CELL

      name:                       timestamp=1301473425265, value=tom2

    6.根据timestamp查询更新之前的 name值,

        get 'student','1',{COLUMN=>'name',TIMESTAMP=>1301473112875}

    7. 给学生的地址簇插入家庭地址

     put 'student','1','address:home','shenzhen street'

    8. 给学生的地址簇插入学校地址

     put 'student','1','address:school','huaqiangbei street'

    9. 查询学生的家庭地址

     get 'student','1',{COLUMN=>'address:home'}

  • 相关阅读:
    (转)MVC3+EF4.1学习系列(十一)EF4.1常见的问题解决
    (转)iReaper for wp7正式发布
    (转)Asp.net MVC 多语言问题的解决方案
    (转)SQL Server 2005 性能优化实战系列(文章索引)
    (转)结合领域驱动设计的SOA分布式软件架构
    (转)细说jquery ui和jqgrid的ASP.NET实现
    (转)简单代码生成器原理剖析
    (转)[翻译]ASP.NET MVC 3 开发的20个秘诀(十八)[20 Recipes for Programming MVC 3]:自动完成搜索
    sql优化: MySQL Explain详解
    mysql优化: show processlist 详解
  • 原文地址:https://www.cnblogs.com/shicf/p/2377494.html
Copyright © 2011-2022 走看看