本节围绕Bigtable的定义“A Bigtable is a sparse,distributed,persistent multidimensionalsorted map.”来进行讲解。
(1)Map
Map是HBase与BigTable的核心概念。Map这种结构类型就是<key,value>键值对的集合。很多编程语言中都有这种数据类型。比如在Java语言中,可以通过Map<String,Object>person=newHashMap<String,Object>();建立一个Person对象。要取得某个记录,可以通过HashMap.get(键值)来获得,而键值就是行名称。一个表就是一个Map。
HBase就是把内存中的Map数据写入了文件,并保持与内存中相同的数据存储方式。
(2)Multidimensional
提到Multidimensional(多维)概念,就要说一下HBase的列概念,列概念同样与传统的关系型数据库不太一样,列概念可以理解为嵌套的Map中的键值。
比如在上节中,我们通过get′person′,′skater′来得到行名skater中所有的列信息,HBase在存储数据的时候使用了嵌套Map的数据结构。对应上节中的例子,存储结构如代码清单3-19所示。
【代码清单3-19】
转换为Java程序如代码清单3-20所示。
【代码清单3-20】
在这里,列id,name和gender是Person Map中嵌套的Mapskater对象的键值。而skater对象就是行名称。Skater对象中的键值集合称为列族,在这里取名为Personcf。HBase允许每一行所对应的列名不同。这也是嵌套Map数据结构所允许的。
比如,再创建一个新的Map对象名为Swimmer,该对象可以只有一个属性。(www.xing528.com)
我们依然可以将它放入person Map中存储。所以说HBase就是将内存中的Map数据类型固化到了文件系统中。
(3)Sparse
有了表,行和列的概念,我们来考虑一下sparse这个词,这个词译为“稀疏”。在列族中,各行的列名可以不同,或者某一行可以一列也没有,这就叫做“稀疏”(数据属性不统一)。与传统关系型数据库相比,稀疏存储的数据可以做到根据需要存储。而在关系型数据库中,不管用户是否真的需要给某一列存储数据,都必须占用固定的空间。
(4)Distributed
HBase可以建立在分布式文件系统之上(比如HDFS),这样HBase所存储的数据可以借助分布式文件系统的功能,分散存储到多台计算机上。同时,数据可以利用分布式文件系统的备份功能,在每台计算机上实现数据备份。
(5)Sorted
在HBase中存储的数据会按照键值的字母顺序进行排列。
比如在skater行中使用的id,name以及gender列,在取出的时候顺序为gender,id和name。
这样做的第一个优点是大大节省了查询时排序的时间损耗。因为此类系统一般存储大量的数据,如果取数据的时候再排序,会耗费大量的计算时间,故在存储的时候就按照一定的顺序存放数据,来缩短查询的时间。另一个优点是,由于使用行名作为键值,与某一行名类似的行名在存储上也是相邻的,这提高了相关关键字查找的效率。比如,在传统关系型数据库中用户要查找所有以“s”开头的数据,则需要遍历整张表。而在HBase中,只要找到第一个开头为“s”的记录,再找到第一个开头不为“s”的记录就可以找到所有以“s”开头的记录。
现在我们掌握了HBase的基本概念,让我们将HBase部署到分布式环境中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。