hbase为什么会那么快

jike_u0r2m9ls HBase 架构详解 最后由 极客学院_吕布 于2017年06月27日回复

  • 1 回答
  • 1.2k 浏览

老师:您号,关于这个问题  我应该从哪些方面去解释呢

  • 极客学院_吕布 2017年06月27日 回答 #1楼
  • 举例:

    A:如果快速查询(从磁盘读数据),hbase是根据rowkey查询的,只要能快速的定位rowkey,  就能实现快速的查询,主要是以下因素:

         1、hbase是可划分成多个region,你可以简单的理解为关系型数据库的多个分区。

          2、键是排好序了的

          3、按列存储的

    首先,能快速找到行所在的region(分区),假设表有10亿条记录,占空间1TB,   分列成了500个region,  1个region占2个G. 最多读取2G的记录,就能找到对应记录; 

    其次,是按列存储的,其实是列族,假设分为3个列族,每个列族就是666M, 如果要查询的东西在其中1个列族上,1个列族包含1个或者多个HStoreFile,假设一个HStoreFile是128M, 该列族包含5个HStoreFile在磁盘上. 剩下的在内存中。

    再次,是排好序了的,你要的记录有可能在最前面,也有可能在最后面,假设在中间,我们只需遍历2.5个HStoreFile共300M

    最后,每个HStoreFile(HFile的封装),是以键值对(key-value)方式存储,只要遍历一个个数据块中的key的位置,并判断符合条件可以了。 一般key是有限的长度,假设跟value是1:19(忽略HFile上其它块),最终只需要15M就可获取的对应的记录,按照磁盘的访问100M/S,只需0.15秒。 加上块缓存机制(LRU原则),会取得更高的效率。

    B:实时查询

           实时查询,可以认为是从内存中查询,一般响应时间在1秒内。HBase的机制是数据先写入到内存中,当数据量达到一定的量(如128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。

         实时查询,即反应根据当前时间的数据,可以认为这些数据始终是在内存的,保证了数据的实时响应。

  • 0 评论