zoukankan      html  css  js  c++  java
  • HBase 数据模型

    HBase 数据模型主要由table,row,column,timestamp,cell几个元素构成。

    table

    表,一个表可能包含多行数据,在HBase中,表其实是一个分布式的表,真正的数据是存储在Region中的,Region可以理解为分片,每个表会包含多个分片,分别由不同的RegionServer管理。每个分片会有多个副本,以实现分片的高可用。

    row

    行,一行数据包含唯一的rowkey,多个column及对应的值,在Hbase中,一张表中所有row都按照rowkey的字典顺序由小到大排列;因为数据在Region上的分布也与rowkey相关,所以在存储数据时,设计合理的rowkey使得数据尽可能在Region上分布均匀,在查询数据时就不会出现一个RegionServer负载过高,而其他RegionServer负载较低的情况。

    column

    列,与关系型数据的列不同,HBase中的column由column family(列簇)和 qualifier(列)组成。两者之间使用":"相连。 一个列簇下可以有多个列;

    列簇设计的好处

    在介绍列簇之前先对比一下行式存储与列式存储;

    行式存储

    数据以行的形式进行存储,一行写完之后,再写下一行;我们经常使用的Mysql数据库就是一个典型的行式存储。

    行式存储优点:

    • 1,在存储时以行为单位,在读取一行数据时,效率很高;
    • 2,由于数据存储在一个文件中,在读取数据时打开的文件句柄较少;

    行式存储缺点:

    • 当读取某些指定列式,需要先读取每行数据,然后进行裁剪,需要处理较多对当前查询无用的信息,且占用内存。

    列式存储

    列式存储将一列数据存储在一起,不同列的数据分别存储;

    列式存储优点

    • 1,由于某一列的数据类型相同可以进行数据压缩,在备份和主从复制时产生的数据量较少;
    • 2,在只查询某一列或者几列时,只需要读取某几个列的文件,且不需要裁剪;
      列式存储缺点:
    • 在读取一行数据时需要打开多个文件,占用句柄较多;

    列簇存储

    列簇存储的出现很好的兼容的行式存储和列式存储。在HBase中一个列簇对应一个HFile文件,列簇中可以包含多个列。当一个列簇中存在多列时,这个列簇相当于行存储,当一个列簇中只有一列时,这个列簇相当于列存储。这样HBase的列簇很好的兼容了行,列存储的优点。我们在使用的过程中,可以建立多个列簇,将经常需要一起读出的字段放到一个列簇,而需要大数据量计算的某几列可以单独放到各自的列簇。

    cell 

    单元格,由五元组(rowkey,column,timestamp,type,value)组成,其中type标识操作的类型(Put/Delete)这样的操作类型。在HBase底层以KV形式存储,key为(rowkey,column,timestamp,type),值为value.

    timestamp

    时间戳,每个单元格在写入HBase时都默认分配一个时间戳,作为单元格的版本。用户在写入时也可以自带时间戳。HBase支持多版本特性,同一个rowkey,column下可以有多个value存在,这些value使用timestamp作为版本号,版本号越大,数据越新;

    HBase的逻辑视图如下:

    其内部包含了两行数据,对应两个rowkey:com.cnn.www和com.example.www;三个列簇:anchor,conetents和people;其中anchor中包含两列:cnnsi.com和my.look.ca;时间戳分别是t9和t8;value为CNN和CNN.com;另外两个列簇分别只包含一个列,contents->html,people->anthor;其中contents的第一行,html列包含三个版本的数据。

    I am chris, and what about you?
  • 相关阅读:
    列出python中可变数据类型和不可变数据类型,并简述原理
    python 字典操作
    Python的is和==
    python2和python3区别
    下面的代码在Python2中的输出是什么?解释你的答案
    编程用sort进行排序,然后从最后一个元素开始判断,去重
    如何在一个function里面设置一个全局的变量?
    用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
    请写出一段Python代码实现删除一个list里面的重复元素
    什么是lambda函数?它有什么好处?
  • 原文地址:https://www.cnblogs.com/arax/p/14904978.html
Copyright © 2011-2022 走看看