HBase的快速查询

快速查询和实时查询
快速查询:
一、分区存储
HBase将每个表划分为多个region,每个region用rowkey来华为,数据的查询也是通过rowkey来查询
查询过程:client向HBase依赖的zookeeper获取metaregion的位置,然后通过metaregion中的记录获取到所要查询的rowkey
对应的region,这样就确定到一个region范围
二、HFile的索引
HFile是HBase最底层数据文件的存储格式,一个region下包含着多个HFile,每个HFile的最后有末尾固定的长度来存储索引,这样可以
快速确认你所查询的数据是否在这个HFile中
三、BloomFilter
BloomFilter是针对HFile的,每一条存储的数据,BloomFilter将记录hash进固定的数组中,这样在查询时对应Hash数组,如果对应位置被改变了,那么所要查的记录可能在这个文件里
如果没有被改变,那么肯定不在,这样可以大幅提高查询的效率
实时查询:
实时查询,可以认为是从内存中查询,一般响应时间在1秒内。HBase的机制是数据先写入到内存中,当数据量达到一定的量(如128M), 再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的 高性能。
实时查询,即反应根据当前时间的数据,可以认为这些数据始终是在内存的,保证了数据的实时响应。

像RDBMS这让的关系型数据库,按行存储,通过严格的ACID事务来进行同步,这造成了系统的可用性和伸缩性方面的大大折扣
HBase,Casandra是NOSQL的数据库或者说no relation,按列存储,是最终一致性的系统,他们为了高的可用性牺牲了一部分的一致性,向HBase就不支持事务特性
不同点:
1、存储模式:HBase是基于列存储的,每个列族都有几个HFile保存,不同列族的文件是分离的,关系型数据库则是基于表格结构和行模式保存的
2、数据操作:HBase只有最简单的CRUD操作,表与表之间是相互分离的,没有关系型数据库中的那些连接操作
3、数据类型:HBase只有简单的字符类型,所有的类型都是交由用户自己处理,他只保存字符串。而关系性数据库则有丰富的类型和存储方式
4、数据维护:HBase是基于HDFS的,所以真实的更新操作是通过新增新纪录外加时间戳来实现的
5、可伸缩性:HBase这类分布式数据库就是为了这个目的开发出来的,他可以轻松的增加或减少硬件的数量,对错误的兼容性比较高

你可能感兴趣的:(面试)