Column Family

在HBase中,数据是按Column Family来分割的,同一个Column Family下的所有列的数据放在一个文件(为简化下面的描述在此使用文件这个词,在HBase内部使用的是Store)中。
为什么要这样子做呢?
 
HBase本身的设计目标是支持 稀疏表,而稀疏表通常会有很多列,但是每一行有值的列又比较少

如果不使用Column Family的概念,那么有两种设计方案:
1.把所有列的数据放在一个文件中(也就是传统的按行存储)。那么当我们想要访问少数几个列的数据时 ,需要遍历每一行,读取整个表的数据, 这样子是很低效的。
2.把每个列的数据单独分开存在一个文件中(按列存储)。那么当我们想要访问少数几个列的数据时,只需要读取对应的文件,不用读取整个表的数据,读取效率很高。然而,由于稀疏表通常会有很多列,这会导致 文件数量特别多 ,这本身会影响文件系统的效率。
 
Column Family的提出就是为了在上面两种方案中做一个折中 。HBase中将一个Column Family中的列存在一起,而不同Column Family的数据则分开。
由于在HBase中Column Family的数量通常很小,同时HBase建议把经常一起访问的比较类似的列放在同一个Column Family中,这样就可以在访问少数几个列时,只读取尽量少的数据。
 
参考:
http://hbase.apache.org/book/regions.arch.html
http://research.google.com/archive/bigtable-osdi06.pdf

你可能感兴趣的:(Column Family)