HBase管理数据的机制

       HBase是一种nosql数据库,使用hdfs作为自己的文件系统,所以是天然分布式的数据库。

       nosql数据库和传统的关系型数据库有很大的不同,对于要存储的数据,nosql数据库使用一张big table进行存储。不像关系型数据库中把数据分成很多张表,还要考虑表与表之间的关系。

       HBase中有两个主要的角色,HMaster 和 HRegionServer。

             HMaster : hbase的主节点。负责协调各个HRegionServer; 负责各个regionServer 上数据的负载均衡。

             HRegionServer: hbase 的从节点。是在逻辑上存储数据的节点(因为hbase将hdfs作为自己的文件系统,所以数据最终会存储在datanode上,一般regionServer和datanode会在同一台物理主机上,这样可以提高hbase的读写效率。)每个regionServer又可以根据列族分成不同store,每个store最终被分成Hfile存在hdfs上。

        注意:1,每个regionServer中都有一个Hlog,当往hbase中写数据的时候会先把数据写入Hlog里面,然后定时的flush到store里。这也是一种备灾的机制,可以防止由于断电导 致数据丢失。

                    2,对于每个store,在内存中都会有对应的缓存,存放该store内经常被查询的数据。

         HBase的寻址机制:因为HBase中的表都很大,而且又是分布式存储的,所以如何快速的寻址对HBase来说很关键。

         Hbase 中创建了两张索引表用于寻址,META表和root表。

          META表:和hbase中普通的表一样,也是分布式的存储在各个regionServer上。存储的内容大概是这样:表名_rowkey的范围--->对应的regionServer的主机名。这样当要查询某一张big table时,只要给定rowkey,就可以很快的找到存储该条数据的regionServer。(hbase中的rowkey 都是按照字典序排列的,从一个regionServer中找出对应的rowkey使用的二分查找的方法,时间复杂度为logN)。但是,当hbase中存的表越来越多,并且每张表的数据量也越来越大时,这张META表的数据也会成为查询的瓶颈,于是就出现了root表。

           root表:和meta表不同,它是由zk集群管理的。不是分布式存储的。又对meta表的数据以及所在的regionServer建立索引。

        也就是说,当要根据一个rowkey去在hbase中查询一条数据时候,会先去查询root表,找到存储该条数据的meta表所在的regionServer, 然后去对应的regionServer上查mata表,找到存储该条数据的regionServer,最终找到该记录。

        

       

你可能感兴趣的:(HBase)