前言
最近选的一门选修课需要学生进行知识分享,好巧不巧的选了HBase,本来以为对其已经学得很ok了,结果自查以后才发现自己学得还是比较表面,冰山一角就是冰山一角,没啥好推脱的,利用一周的时间充实预分享的知识,昨天已经分享结束,虽然还是由于拖拉导致没能按以往惯例准备好讲解稿和几次试讲,但时长是够了。想着也是花了时间就把一些东西放在这当记录好了(里面也主要是搜集的各种资料的总结)。
知识点
- 为什么要不用RDBMS?
- 数据量爆炸式增长并数据种类急剧增加的背景下,使用RDBMS二维表会变得很高很宽,查询效率大大降低
- RDBMS对单机依赖很强,集群部署难;升级维护难,需要进行停机维护,耗费人力物力
- 对数据模式要求严格,对数据格式约束很强。对于非结构化和半结构化数据只能存储数据的存储路径,存储方面需要舍弃部分数据,在数据分析的背景下不合适
- 为什么不用HDFS?
- hadoop设计的初衷是大规模数据的计算和olap分析, 应用场景区别与数据库,所以在HDFS设计时候就侧重在一次写入多次读取。绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。对文件的随机写入操作在实际中几乎不存在。一旦写完之后,对文件的操作就只有读,而且通常是按顺序读。
- HDFS虽然因为文件的分布式存储和强扩展性,具有海量数据存储的能力,但文件本身是只支持增加数据的,如果查询数据需要遍历整个HDFS集合找到目标HDFS,并对整个HDFS文件从头到尾进行遍历,效率过低
- 对于数据删除,HDFS只支持整个文件删除,不支持文件中单个数据的删除
- 对于数据修改,HDFSdatanode需要进行同步更新,消耗大。并且在同步的时候有读请求的话还需考虑读的是脏数据还是加锁不让读。如果是第二种情况加速不让读提供强一致性分布式事务,不仅大大降低HDFS性能而且违背hadoop设计的初衷. 如果提供一个脏读数据,为什么不直接删除数据a然后重新插入修改后数据a,让用户有个正确的读取操作呢?
- 为什么要用NoSQL?
- NoSQL,not only sql。对比RDBMS,对数据模式要求不严谨,适合存储非结构化数据,数据以二进制形式存储
- 扩展性很强,在分布式环境中应用较多
- 为什么要用HBase?
- 对于HDFS无法支持随机读写问题,想到如果提前先对数据进行排序,查询效率相对会提高些。HBase是基于HDFS之上的一个数据库引擎,主要做的就是数据排序和无效数据简单的处理
- HBase属NoSQL,对表约束不强,无模式设计,所有字段按照Byte字节数据格式存储
- HBase扩展性强,支持海量数据存储
-
<