美团一面:为什么选用Hbase,Hbase和MySQL的区别是什么?
共 2006字,需浏览 5分钟
· 2021-09-27
MySQL + HBase是我们日常应用中常用的两个数据库,分别解决应用的在线事务问题和大数据场景的海量存储问题。
从架构对比看差异
相比MySQL,HBase的架构特点:
完全分布式(数据分片、故障自恢复) 底层使用HDFS(存储计算分离)。
由架构看到的能力差异:
MySQL:运维简单(组件少)、延时低(访问路径短) HBase:扩展性好、内置容错恢复与数据冗余
![](https://filescdn.proginn.com/ebb58751b650e29ee4f37194f6f48f30/287984824a8ea8bf4e6de76b9c025862.webp)
![](https://filescdn.proginn.com/5ab831ee5905d887ff73c2f92bf271d4/8c993ab37ffe7205a382b1dc28d8f6fa.webp)
从引擎结构看差异
![](https://filescdn.proginn.com/5e2a95fcb3165373fedcdcaf190360e0/482cdabf36e4c423b00186e3155f1728.webp)
![](https://filescdn.proginn.com/6e3b17cbb6fbc5d332cf9da800759a4f/4f7278232834fdc342f848a10cb02c39.webp)
相比MySQL,HBase的内部引擎特点:
HBase原生没有sQL引擎(无法使用sQL访问,使用APlI),云HBase增强版(Lindorm)及开源Phoenix均提供sQL能力 HBase使用LSM(Log-Structure Merge)树,,Innodb使用B+树。
![](https://filescdn.proginn.com/48ffede6f3e503f9710b5acd50abb8c3/dd8b393c07c6bd781dac92f114414816.webp)
![](https://filescdn.proginn.com/92a1caa020791419660b17e39cc075c3/18c780d40eb4503d39f13b985c13adfa.webp)
由引擎结构(B+Tree vs LSM Tree)看到的能力差异:
MySQL:读写均衡、存在空间碎片 HBase:侧重于写、存储紧凑无浪费、Io放大、数据导入能力强
关于LSM树和B+树的理解
目的是为了减少磁盘IO,
索引:某种数据结构,方便查找数据
hash索引不利于范围查询,使用树结构
B+树
从磁盘读数据是以页为单位,根据这个特点使用平衡多路查找树 B+树的非叶子节点存放索引,叶子节点存放数据 非叶子节点能够存放更多的索引,树的高度更低 叶子节点通过指针相连,有利于区间查询 叶子节点和根节点的距离基本相同,查找的效率稳定 数据插入导致叶子节点分裂,最终导致逻辑连续的数据存放到不同物理磁盘块位置,导致区间查询效率下降
LSM Tree
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
![](https://filescdn.proginn.com/a1b4f7052f1943f409e1b6a36b8859ce/1b46e6b3a89ea981f0a2ea8e55277574.webp)
HBase的特色功能—多版本
![](https://filescdn.proginn.com/eda223e31c8d053ade553367ea805048/83ef297bf8fb46e7a3736f5d598fbd09.webp)
HBase的特色功能—多列簇
![](https://filescdn.proginn.com/6b2ffcffacfba5f715303a48d216e8fe/529a69cd8b4f7dc3a70549d263d4313b.webp)
HBase的特色功能—MOB
![](https://filescdn.proginn.com/595d986e131cca502c5647dc513b774a/9c0909a3011a56b95056a145639b26b6.webp)
从生态看差异
MySQL:满足APP的在线数据库存储,一般有我足矣
![](https://filescdn.proginn.com/d764420e9435b0fec2cda852e30a6514/a492eb3a8c01c80677ef24cd74a92b93.webp)
大数据圈:应用于大数据场景的存储、计算及管理组件
![](https://filescdn.proginn.com/b2607019ba48eee5339ba0d3070c17ae/4caa008750c51c375d53c5f4330223c6.webp)
MySQL:一般可独立满足在线应用的数据存储需求,或者与少量组件配合(如缓存、分库中间件) HBase:一般需要和较多大数据组件一起配合完成应用场景,场景架构的设计、实施存在较大的挑战
总结
![](https://filescdn.proginn.com/9925b6ca4dd1fe47a176b71b2a0f5cf0/5f81e335b6df0cf3ca0956d0ff1d7142.webp)
哪些场景的存储适合HBase ?
![](https://filescdn.proginn.com/303a13d1e534424d31e6073358acb31a/b3e8a268dcf4f507bdd83f80e939ee6e.webp)
![](https://filescdn.proginn.com/4394df3a913200e5c752bc452112eda8/4461504d3b4a56766ac5749c29b8814e.webp)
![](https://filescdn.proginn.com/5b826762898884303e5a8ccc8036824a/7fb7325c1cb5dd0161d529944d20c5b0.webp)
![](https://filescdn.proginn.com/03989a68aa9592dfa8060f0f7ee76232/22615d172522fad34d4737ad34290e47.webp)
![](https://filescdn.proginn.com/4608a0b553365724ce354bd04f7a2863/55f0c2efdb761aa93068d16b29c66c9a.webp)
![](https://filescdn.proginn.com/1af3152c50d30504e5ffc678bee5e320/ad44a51c413e0f3b7b3df77652b8265e.webp)
![](https://filescdn.proginn.com/c7f508a3ac0c36d5953ea332a5178e54/252f5a6e7af83593e7e74049b53efd13.webp)
![](https://filescdn.proginn.com/1d9ebdf9d8419f9e675b4f3a030e66d6/15f067e0b30cd28fa7364407c83355cc.webp)
![](https://filescdn.proginn.com/45cda5f9c32f6547d2151fe33dd127c4/a5361d72a8f3882954db14e00b5ad0dd.webp)
![](https://filescdn.proginn.com/ec228ae4a38dba3dba3f032d6e33ae82/531133fd3e9b195fa36670a026fc5aef.webp)
![](https://filescdn.proginn.com/354c24fd9cdecef2406ae93a5ef10612/e0c590f898fe3edad0530fa6b53b80c3.webp)
HBase不是MySQL的替换,HBase是业务规模及场景扩张后,对MySQL的自然延伸
![](https://filescdn.proginn.com/ab0b95483d61f119418c5561cae51936/a3dc044187ad44b0864893ebadfb22ac.webp)
(感谢阅读,希望对你所有帮助)
来源:blog.csdn.net/weixin_41605937/article/details/110933984
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)