Hbase
谷歌—BigTable论文
海量存储、列式存储、极易扩展(RS/HDFS)、高并发、稀疏性(主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的)
Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库
利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务
主要用来存储非结构化和半结构化的松散数据
快的原因:用户操作的是数据的标记,不是操作真正的数据,当数据后期的合并和拆分的时候才处理数据
一、HBASE数据模型
Row Key | Time Stamp | CF1 | CF2 | CF3 |
---|---|---|---|---|
11248112 | t6 | CF2:q1=val1 | CF3:q3=val3 | |
11248112 | t3 | |||
11248112 | t2 | CF1:q2=val2 |
RowKey
- RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要;
决定一行数据
按照字典顺序排序的。
Row key只能存储64k的字节数据
Column Family列族 & qualifier列
- Column Family:列族,拥有一个名称(string),包含一个或者多个相关列;
- qualifier:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
Tips:创建表的时候可以不给列,但是必须给列族
HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’;
列名以列族作为前缀,每个“列族”都可以有n个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入
权限控制、存储以及调优都是在列族层面进行的
HBase把同一列族里面的数据存储在同一目录下,由几个文件保存
Timestamp时间戳
- Version Number:类型为Long,默认值是系统时间戳,可由用户自定义;
Tips:时间戳可以理解为 是数据的版本号
在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,