(1)大:一个表可以有上亿行,上百万列。 (2)面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。 (3)稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。 (4)无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。 (5)数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。 (6)数据类型单一:HBase中的数据都是字符串,没有类型。
(1)决定一行数据。 (2)按照字典顺序排序的。 (3)Row key只能存储64k的字节数据。
(1)HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。 (2)列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如 course:math, course:english, 新的列可以随后按需、动态加入;权限控制、存储以及调优都是在列族层面进行的; (3)HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
(1)由行和列的坐标交叉决定; 单元格是有版本的;单元格的内容是未解析的字节数组; (2)由{row key, column( = +), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存储。
(1)在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。 (2)时间戳的类型是 64位整型。 (3)时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
有关HBase其他文章请点击此处。 ps:望多多支持,后续更新中。。。
