目录
Apache HBase – Apache HBase? Home
" This project's goal is the hosting of very large tables -- billions of rows X millions of columns --"
HBase使用与BigTable非常相似的数据模型,用户将数据行存储在带标签的表中。数据行具有可排序的键和任意数量的列。该表存储稀疏,因此如果用户喜欢,同一表中的行可以具有疯狂变化的列。
类似数据库概念,其下有多个表,自带两个:hbase和default
hbase在定义表时只需要声明列族即可,不需要声明具体的列。数据存储是稀疏的,可以动态、按需指定,可以轻松应对字段变更
行由RowKey和多个Column组成的,数据是按照RowKey字典顺序存储的,查询时只能按照RowKey进行检索,所以RowKey的设计十分重要。
hbase不能写sql,比如where name=xx不行,没这个功能,只能按rowkey读取,这也是hbase不太好用的原因。
ColumnFamily列族+ColumnQualifier列名组成。
如info:name,info:age
建表时只需要指明列族,而列名无需预先定义。
用来标记版本
即k:v模型,key由{rowkey,column family: column qualifier, timestamp}组成来,唯一确定的单元。cell中的数据全部是字节码形式存储。
cell针对的是底层存储StoreFile而言的,指的是底层存储的一行数据,其他是针对表而言的
横向拆分:按行拆分region
竖向拆分:按列族拆分为store
物理存储结构即为数据映射关系,而在概念视图的空单元格,底层实际根本不存储。
警告:不要修改
System Table:hbase:meta
表名:[table],[region start key],[region id]
第一列:info:regioninfo 为region信息,存储一个HRegionInfo对象
第二列:info:server 当前region所处的RegionServer信息,包含端口号
第三列:info:serverstartcode 当前region被分到RegionServer的起始时间
如果一个表处于切分的过程中,即region切分,还会多出两列info:splitA和info:splitB,存储值也是HRegionInfo对象,拆分结束后,删除这两列
master只负责修改和写hbase/meta表,读找zk就可以了,zk会告诉你表在哪
仅能保证单文件HFile/storeFile有序
hash有个特点:说没有一定没有,说有不一定有