来源:https://blog.csdn.net/weixin_41605937/article/details/110933984
MySQL + HBase是我们日常应用中常用的两个数据库,分别解决应用的在线事务问题和大数据场景的海量存储问题。
一、从架构对比看差异
相比MySQL,HBase的架构特点:
完全分布式(数据分片、故障自恢复)
底层使用HDFS(存储计算分离)。
由架构看到的能力差异:
MySQL:运维简单(组件少)、延时低(访问路径短)
HBase:扩展性好、内置容错恢复与数据冗余
![](http://dingyue.ws.126.net/2021/1006/8d8bc2abj00r0k2tq001gd200oh00dtg00it00al.jpg)
![](http://dingyue.ws.126.net/2021/1006/d35773daj00r0k2tr0013d200mx00e4g00it00bk.jpg)
二、从引擎结构看差异
![](http://dingyue.ws.126.net/2021/1006/8436f950j00r0k2ts001xd200ou00ebg00it00at.jpg)
相比MySQL,HBase的内部引擎特点:
HBase原生没有SQL引擎(无法使用sQL访问,使用APlI),云HBase增强版(Lindorm)及开源Phoenix均提供sQL能力
HBase使用LSM(Log-Structure Merge)树,,Innodb使用B+树。
![](http://dingyue.ws.126.net/2021/1006/3c439f8cj00r0k2tt0016d200nc009ug00it007x.jpg)
![](http://dingyue.ws.126.net/2021/1006/5a138984j00r0k2tu001td200ox00btg00it008w.jpg)
由引擎结构(B+Tree vs LSM Tree)看到的能力差异:
MySQL:读写均衡、存在空间碎片
HBase:侧重于写、存储紧凑无浪费、Io放大、数据导入能力强
目的是为了减少磁盘IO,
索引:某种数据结构,方便查找数据
hash索引不利于范围查询,使用树结构
B+树
从磁盘读数据是以页为单位,根据这个特点使用平衡多路查找树
B+树的非叶子节点存放索引,叶子节点存放数据
非叶子节点能够存放更多的索引,树的高度更低
叶子节点通过指针相连,有利于区间查询
叶子节点和根节点的距离基本相同,查找的效率稳定
数据插入导致叶子节点分裂,最终导致逻辑连续的数据存放到不同物理磁盘块位置,导致区间查询效率下降
LSM(Log-Structured Merge),LevelDB,RocksDB,HBase,Cassandra等都是基于LSM结构
HDD,SSD顺序读写的速度都高于随机读写,写入日志就是顺序写
WAL,memtable,sstable
有利于写,不利于读,先从memtable查找,再到磁盘所有的sstable文件查找
Compaction的目的是减少sstable文件数量,缓解读放大的问题,加速查找可以对sstable文件使用布隆过滤器
Compaction策略
STCS(SIze-Tiered Compaction Strategy)空间放大和读放大问题
LCS(Leveled Compaction Strategy)写放大问题
Compaction会引入写放大问题,在Value较大时采用KV分离存储缓解写放大
写操作多于读操作时,LSM树有更好的性能,因为随着insert操作,为了维护B+树结构,节点分裂。读磁盘的随机读写概率会变大,性能会逐渐减弱。LSM树相比于B+树,多次单页随机写变成一次多页随机写,复用了磁盘寻道时间,极大提高写性能。不过付出代价就是放弃部分读性能。
相同之处:数据以表的模型进行逻辑组织,应用对数据进行增删改查
不同之处:MySQL的SQL功能更丰富:事务能力更强,HBase既可以用APIl进行更灵活、性能更好的访问,也可以借助Phoenix使用标准sQL访问;只支持单行事务。
HBase的特色功能--TTL
![](http://dingyue.ws.126.net/2021/1006/880e1435j00r0k2tu001dd200mx00b4g00it0094.jpg)
HBase的特色功能—多版本
![](http://dingyue.ws.126.net/2021/1006/2d2e73d0j00r0k2tv001nd200n500d1g00it00al.jpg)
HBase的特色功能—多列簇
![](http://dingyue.ws.126.net/2021/1006/a7651adbj00r0k2tw001md200nk00axg00it008p.jpg)
HBase的特色功能—MOB
![](http://dingyue.ws.126.net/2021/1006/65caff3dj00r0k2tw001kd200nx00c7g00it009l.jpg)
五、从生态看差异
MySQL:满足APP的在线数据库存储,一般有我足矣
![](http://dingyue.ws.126.net/2021/1006/48a004f5j00r0k2tx000wd200gb00bpg00gb00bp.jpg)
大数据圈:应用于大数据场景的存储、计算及管理组件
![](http://dingyue.ws.126.net/2021/1006/370ca78cj00r0k2tx000zd200fc00axg00fc00ax.jpg)
MySQL:一般可独立满足在线应用的数据存储需求,或者与少量组件配合(如缓存、分库中间件)
HBase:一般需要和较多大数据组件一起配合完成应用场景,场景架构的设计、实施存在较大的挑战
![](http://dingyue.ws.126.net/2021/1006/449ca9b5j00r0k2ty001jd200ow00a5g00it007n.jpg)
哪些场景的存储适合HBase ?
![](http://dingyue.ws.126.net/2021/1006/cfdf9ec1j00r0k2ty0017d200ko00ebg00it00d0.jpg)
![](http://dingyue.ws.126.net/2021/1006/0c0a45e6j00r0k2tz001ud200o800dbg00it00ab.jpg)
![](http://dingyue.ws.126.net/2021/1006/2355cf80j00r0k2tz001hd200nk00dvg00it00b2.jpg)
![](http://dingyue.ws.126.net/2021/1006/777bdc4fj00r0k2u00020d200nv00dtg00it00av.jpg)
![](http://dingyue.ws.126.net/2021/1006/eb041492j00r0k2u0001zd200ov00e8g00it00ar.jpg)
![](http://dingyue.ws.126.net/2021/1006/c25144ffj00r0k2u1001zd200mf00ewg00it00ch.jpg)
![](http://dingyue.ws.126.net/2021/1006/994666b1j00r0k2u1001ld200il00d4g00il00d4.jpg)
![](http://dingyue.ws.126.net/2021/1006/3f0dcd39j00r0k2u2001nd200os00dlg00it00ab.jpg)
![](http://dingyue.ws.126.net/2021/1006/d5f53098j00r0k2u3001sd200nj00ebg00it00bf.jpg)
![](http://dingyue.ws.126.net/2021/1006/f8b701e9j00r0k2u30022d200o500e9g00it00b3.jpg)
![](http://dingyue.ws.126.net/2021/1006/02c915b1j00r0k2u4001md200mj00exg00it00cg.jpg)
HBase不是MySQL的替换,HBase是业务规模及场景扩张后,对MySQL的自然延伸
![](http://dingyue.ws.126.net/2021/1006/140949c2j00r0k2u4001hd200ol00djg00it00ac.jpg)
END
2021年Java原创面试题库连载中
更多内容,点击上方名片查看
热门跟贴