美团一面:为什么选用Hbase,Hbase和MySQL的区别是什么?
共 1946字,需浏览 4分钟
· 2021-09-27
MySQL + HBase是我们日常应用中常用的两个数据库,分别解决应用的在线事务问题和大数据场景的海量存储问题。
从架构对比看差异
相比MySQL,HBase的架构特点:
完全分布式(数据分片、故障自恢复) 底层使用HDFS(存储计算分离)。
由架构看到的能力差异:
MySQL:运维简单(组件少)、延时低(访问路径短) HBase:扩展性好、内置容错恢复与数据冗余
![](https://filescdn.proginn.com/fa28c4558487e932b195b78e0aafe833/7970709e757ed3581eac8113e43012bd.webp)
![](https://filescdn.proginn.com/f3c77bddbc4b3111609f17900f4de612/f8a3b8eb0cc37775deab16c6760a020b.webp)
从引擎结构看差异
![](https://filescdn.proginn.com/cdd63a8b5a302003d7fa5f073deff18c/0c52ff672e939174cc91bc83c462da48.webp)
![](https://filescdn.proginn.com/12f40e4a5ff6c5f8ff3e2b653cb2b3d5/19eee525db480c537aa79649e91157a4.webp)
相比MySQL,HBase的内部引擎特点:
HBase原生没有sQL引擎(无法使用sQL访问,使用APlI),云HBase增强版(Lindorm)及开源Phoenix均提供sQL能力 HBase使用LSM(Log-Structure Merge)树,,Innodb使用B+树。
![](https://filescdn.proginn.com/218ed5ddd79050324107eb4cfd6a0005/7f1edc72a26d00c2ed75f6e414a8b89a.webp)
![](https://filescdn.proginn.com/2eb25def7bb948177f82f73cca7c25cf/425f5c0b316b8049e84271603064bab2.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/7cbf8eaee6abf31ccbe9570df3165709/96676dc1c533f651a7a8e2be9d3964aa.webp)
HBase的特色功能—多版本
![](https://filescdn.proginn.com/7ed0d45dc4182048e162098ea0172a88/3709efed93154f929b24e9495e0b3781.webp)
HBase的特色功能—多列簇
![](https://filescdn.proginn.com/094e7b986adce74c6ba7b9605f618f70/2992b4c03d28f65d19a40f1fdcccbbd3.webp)
HBase的特色功能—MOB
![](https://filescdn.proginn.com/ead00dd319db9b221d3c0ca59c0b6eda/fe232774a19029999a2012bd758c32cb.webp)
从生态看差异
MySQL:满足APP的在线数据库存储,一般有我足矣
![](https://filescdn.proginn.com/f73658a87529913f9cfe0c83cbe169ac/a25c50e3fb74e0773c84292aca36ffeb.webp)
大数据圈:应用于大数据场景的存储、计算及管理组件
![](https://filescdn.proginn.com/aefd781fc1f01bf2ef70facebb28485d/c3c8079f8aa19b948311567918b4be0b.webp)
MySQL:一般可独立满足在线应用的数据存储需求,或者与少量组件配合(如缓存、分库中间件) HBase:一般需要和较多大数据组件一起配合完成应用场景,场景架构的设计、实施存在较大的挑战
总结
![](https://filescdn.proginn.com/c0b2046472b27ad7673066fd340b5623/9346411c7ceb30ba3bba2de081f72c41.webp)
哪些场景的存储适合HBase ?
![](https://filescdn.proginn.com/d3e2d73b041ad8df9ad403e11305e6bf/5648333166486f51f3f0d4295d270b19.webp)
![](https://filescdn.proginn.com/14070c0f5758b82beaaf7c42c3ae779f/60c2d754a19a1bacbe3611e1493d3b23.webp)
![](https://filescdn.proginn.com/9f0ef36d1d1fa0219fed10180a5858da/888460b29226d217ff2264a00d4b03e2.webp)
![](https://filescdn.proginn.com/dc0c322690a71d325b862a19726f0787/7e164d3ee9a2b25d700f3bc4b8ba60a5.webp)
![](https://filescdn.proginn.com/0512b2c396a218f783b34b918f37a60f/68182dd75bc12bf243e0d42a30d63b62.webp)
![](https://filescdn.proginn.com/32e282582d25df73a741a23e16768dd0/4545cd9f2e23f2c34f409bd1b58046cd.webp)
![](https://filescdn.proginn.com/266bd347eb8c210b1a9aff060889e4dd/f2ca1f6041cc5c5066f4378ab8bdaf83.webp)
![](https://filescdn.proginn.com/32ec81708f1ad492e79e496b64eec56c/f6ff441aa1be17c69c6163483e8809a3.webp)
![](https://filescdn.proginn.com/a1586a31e1ec7fcf2ec29b7a3f08b6b6/f31c89064f07cc8e26ebe4033e403386.webp)
![](https://filescdn.proginn.com/1752fe75a35788d129ad66e69e28332d/a3a51da89d01417e3410e76cd295cc8e.webp)
![](https://filescdn.proginn.com/19dbd91195a3d228dc57ba56d4e36fec/cbb674df338781a1515bf0eab0b6e957.webp)
HBase不是MySQL的替换,HBase是业务规模及场景扩张后,对MySQL的自然延伸
![](https://filescdn.proginn.com/5d7febb96624773ea6bc97ca426377b5/2c105973241667f23378f8b5c02ccbfd.webp)
(感谢阅读,希望对你所有帮助)
来源:blog.csdn.net/weixin_41605937/article/details/110933984
— 【 THE END 】— 本公众号全部博文已整理成一个目录,请在公众号里回复「m」获取! 最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 PDF 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)