Hbase数据库的一些基础知识

来源:互联网 发布:windows模块更新程序 编辑:程序博客网 时间:2024/05/17 02:29

Hbase是一种NoSql数据库,与传统的RDBMS(关系型数据库)有着本质的区别。

一、NoSql

NoSql的字面意思是Not Only SQL,泛指用来解决大数据相关问题而创建的数据库技术,目前在市场上常用的有Mongo DB,阿里巴巴开源的OceanBase等,当然也包括本文所介绍的HBase。虽然NoSql数据库是面向大数据而应运而生的,但是也并非说在大数据时代,传统的关系型数据库就没有了用武之地,其实,目前,在很多方面,非关系型数据库还是不能完全取代关系型数据库的。

二、Hbase数据模型

Hbase好有几种数据模型,主要有以下几种:

(1)列族(column family)

即为Hbase表中的每个列,都归属于某个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如:courses:history,courses:math都属于courses这个列族。列族中可以动态添加新的列。

(2)单元

Hbase中通过row和column确定为一个存储单元成为cell。

(3)时间戳

每个单元都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由Hbase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成唯一性的时间戳。每个cell中,不同版本的数据按照时间顺序来排序。此外,为了节省空间以应对稀疏的数据,列可以被赋空值来节省空间。

(4)Row Key

与NoSql数据库们一样,row key用来检索记录的主键,访问Hbase table中的行,只有三种方式:

        1)通过单个row key访问

        2)通过row key的range

        3)全表扫描

row key行键(row key)可以是任意字符串(最大长度是64KB,实际应用中一般为10-100bytes),在Hbase内部,row key保存为字节数组。存储时,数据按照row key的字典序(byte order)排序存储。设计key时,要充分利用排序存储的特性,将经常一起读取的行存放到一块。(位置相关性)

三、具体的例子对比

RDBMS table

SSN-primary key              Last Name           First Name            Account Number          Type of Account         Timestamp

    01234                             Smith                    John                         abcd1234                     Checking               20120118   

    01235                            Johnson              Micheal                       wxyz1234                     Checking               20120118

    01235                            Johnson              Micheal                       aabb1234                     Checking               20111123


Hbase table

Row Key                         Value(CF,Column,Version,Cell)

 01234                             info:{'lastname':'Smith',

                                                'firstname':'John'}

                                        acct:{'checking':'abcd1234'}

 01235                             info:{'lastname':'Johnson'

                                                'firstname':'Micheal'}

                                        acct:{'checking':'wxyz1234'@ts=2012,

                                                 'checking':'aabb1234'@ts=2011}

上述对于相同的内容,关系型数据库和Hbase数据库所存储的方式就完全不同了。

原创粉丝点击