Row Key
- 类似于MySQL中的主键,HBase天然自带的,在创建时不需要显示指定。
- 访问表里的行只有三种方式:①. 通过单个Row key访问 ②. 给定Row key的range ③. 全表扫描
- Row key按照字典序存储,要充分考虑排序存储这个特性,将经常一起读取的行存储放到一起(位置相关性)。
注意:
- 字典序对int排序的结果是1,10,100,11,2,20,21,…,9。要保持整形的自然序,行键必须用0作左填充。
- 行的一次读写是原子操作 (不论一次读写多少列),使得多用户不能并发对同一个行进行更新操作。
Column Family
- 建表时手动指定,包含一个或者多个列
- 列族中的数据都是以二进制的形式保存在hdfs上,没有数据类型
- 增加新的列族:先disable ‘users‘ / alter ‘users‘,‘info‘ / enable ‘users‘。
- 删除列族方式:先disable ‘users‘ / alter ‘users‘,{NAME=>‘info‘,METHOD=>‘delete‘} / enable ‘users‘
- 不能重命名列族:通常做法是使用API创建一个有着期望名称的新的列族,然后将数据复制过去,最后再删除旧的列族。
- 每个列族存储在HDFS上的一个单独文件中,空值不会被保存。
- 访问控制、磁盘和内存的使用统计都是在列族层面进行的。
- 列族里的元素最好具有相同的读写方式(例如等长的字符串),以提高性能。
Column
- 列名在添加数据时动态添加,无需在建表时指定
- 设置列值:put ‘users‘,‘xiaoming‘,‘info:age‘,‘18‘
- 读取列值:get ‘users‘,‘info:age‘
TimeStamp
- 默认值是系统时间戳,也可以由客户显式赋值。
- 每个 cell中,不同版本的数据按照时间倒序排列,即最新的数据排在最前面。
- 如果应用程序要避免数据时间戳冲突,就必须自己生成具有唯一性的时间戳。
Cell
- HBase中通过"行键 + 列族:列名"确定的唯一存贮单元称为Cell。
- 每个Cell都保存着同一份数据的多个版本,每个版本通过时间戳Time Stamp来索引。
- Cell的每个版本由"行键 + 列族:列名 + 时间戳"决定。
HBase数据模型
原文:http://www.cnblogs.com/skyl/p/4798630.html