码迷,mamicode.com
首页 > 其他好文 > 详细

HBase数据模型

时间:2015-09-10 19:04:06      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

Row Key

  1. 类似于MySQL中的主键,HBase天然自带的,在创建时不需要显示指定
  2. 访问表里的行只有三种方式:①. 通过单个Row key访问 ②. 给定Row key的range ③. 全表扫描
  3. Row key按照字典序存储,要充分考虑排序存储这个特性,将经常一起读取的行存储放到一起(位置相关性)。

注意:

  • 字典序对int排序的结果是1,10,100,11,2,20,21,…,9。要保持整形的自然序,行键必须用0作左填充
  • 行的一次读写是原子操作 (不论一次读写多少列),使得多用户不能并发对同一个行进行更新操作。

Column Family

  1. 建表时手动指定,包含一个或者多个列
  2. 列族中的数据都是以二进制的形式保存在hdfs上,没有数据类型
  3. 增加新的列族:先disable ‘users‘ / alter ‘users‘,‘info‘ / enable ‘users‘。
  4. 删除列族方式:先disable ‘users‘ / alter ‘users‘,{NAME=>‘info‘,METHOD=>‘delete‘} / enable ‘users‘
  5. 不能重命名列族:通常做法是使用API创建一个有着期望名称的新的列族,然后将数据复制过去,最后再删除旧的列族。
  6. 每个列族存储在HDFS上的一个单独文件中,空值不会被保存。
  7. 访问控制、磁盘和内存的使用统计都是在列族层面进行的。
  8. 列族里的元素最好具有相同的读写方式(例如等长的字符串),以提高性能。

Column

  1. 列名在添加数据时动态添加,无需在建表时指定
  2. 设置列值:put ‘users‘,‘xiaoming‘,‘info:age‘,‘18‘
  3. 读取列值:get ‘users‘,‘info:age‘ 

TimeStamp

  1. 默认值是系统时间戳,也可以由客户显式赋值。
  2. 每个 cell中,不同版本的数据按照时间倒序排列,即最新的数据排在最前面。
  3. 如果应用程序要避免数据时间戳冲突,就必须自己生成具有唯一性的时间戳。 

Cell

  1. HBase中通过"行键 + 列族:列名"确定的唯一存贮单元称为Cell。
  2. 每个Cell都保存着同一份数据的多个版本,每个版本通过时间戳Time Stamp来索引。
  3. Cell的每个版本由"行键 + 列族:列名 + 时间戳"决定。

HBase数据模型

标签:

原文地址:http://www.cnblogs.com/skyl/p/4798630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!