hbase作为列数据库与行数据库不同在哪里?

行数据库对每一行记录的所有列都是顺序存放,当读取其中一列时,必须顺序读下去找到,行记录在物理上是在一起的。

列数据库hbase的逻辑模型是一种有序的嵌套map映射,用java语言描述的话是这样的:Map<行键,Map<列族,Map<列名,Map<时间戳,值>>>>

其中对于同一列的数据可以保存历史版本,为了使得最新版的数据放在前面,时间戳逆序排序,其他映射键升序排列。

hbase中HRegion是对于行的划分,实际存储是以HFile的方式进行的,存储时,根据列族进行聚集存储,一个列族的数据可以存放在多个HFile中,但需要保证一行的该列族数据放在一起,方便查询;一个HFile只能存储一个列族的信息,这样查询时,可以不用查询所有列,提高效率。那么在划分列族时,应该把经常放在一起查出来的数据作为一个列族。

HFile中含有多个数据块,在文件尾中存储着这些数据块的偏移地址等信息。加载读取HFile文件时,最先读取这一部分内容。HFile中数据应该是按键排序的,那么当HFile文件过大时,是否也需要划分?如果需要划分,那么如果一个列族数据量大,一个列族数据量小,那么数据量小的也会划分为多个?

参考资料:http://asyty.iteye.com/blog/1250301

猜你喜欢

转载自blog.csdn.net/flushest/article/details/62416501