深度对比,Hbase 和 MySQL 的区别是什么?
业余草
共 1653字,需浏览 4分钟
·
2021-11-29 20:11
MySQL + HBase是我们日常应用中常用的两个数据库,分别解决应用的「在线事务问题」和「大数据场景」的海量存储问题。
从架构对比看差异
相比MySQL,HBase的架构特点:
1.完全分布式(数据分片、故障自恢复)、2.底层使用HDFS(存储计算分离)。
由架构看到的能力差异:
MySQL: 运维简单(组件少)、延时低(访问路径短) HBase: 扩展性好、内置容错恢复与数据冗余
![](https://filescdn.proginn.com/0a34188c20abcb77e36d92f9e4def59b/a8559e7fe2328872c83a568ac047bac7.webp)
![](https://filescdn.proginn.com/7ee767ea89eed581e76d80a48a85b0ca/311aa98df52b459ed4b34c59910b7866.webp)
从引擎结构看差异
![](https://filescdn.proginn.com/f2a5dfb03acba568ad81b9c2188286f0/598bda208935aa476807dc56c724ff7e.webp)
![](https://filescdn.proginn.com/e6c85b94d9ac40b9f4880e188d4fcd7a/bce371e3a93c1e924fee03b7db6caf6a.webp)
相比MySQL,HBase的内部引擎特点:
HBase原生没有sQL引擎(无法使用sQL访问,使用APlI),云HBase增强版(Lindorm)及开源Phoenix均提供sQL能力 HBase使用LSM(Log-Structure Merge)树,,Innodb使用B+树。
![](https://filescdn.proginn.com/6c933e45eaf71d6e470e3a95b0587017/09f1c58dff204ce885966e02dda11d63.webp)
![](https://filescdn.proginn.com/d766ac93394cf71f1e6ebd1c40796767/f9e15da23c7f8ba8aceb5e78a91312bf.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/93a63fa63ef2eaba0e7ba26f6c6739ea/2a5d4f7f8f998904af709d94533cf672.webp)
HBase的特色功能—多版本
![](https://filescdn.proginn.com/28c82bb0445e1582e21c69d82bdf1a60/45ed4a3a0022aac0ac552535dd8f13ad.webp)
HBase的特色功能—多列簇
![](https://filescdn.proginn.com/eab7f5c02cb843bd19ccc7444f66f782/f9e3557ec96722850cfaea938776374b.webp)
HBase的特色功能—MOB
![](https://filescdn.proginn.com/c873b45894cff5813b4f5fc337a154dc/8b7dfdd6caf032d67efb11e0d53e0505.webp)
从生态看差异
MySQL: 满足APP的在线数据库存储,一般有我足矣
![](https://filescdn.proginn.com/da5b995a4785c0b8d4f396a3749138ae/19b5ba8d4b09490c6fc6ca39a1fcbd67.webp)
大数据圈:应用于大数据场景的存储、计算及管理组件
![](https://filescdn.proginn.com/fc6b1d9aeb2c47b24c673653a23e6347/a96fc96275651f14aa3402835767209c.webp)
MySQL:一般可独立满足在线应用的数据存储需求,或者与少量组件配合(如缓存、分库中间件)
HBase:一般需要和较多大数据组件一起配合完成应用场景,场景架构的设计、实施存在较大的挑战
总结
![](https://filescdn.proginn.com/2da3e1e7ff1823fb2fc5ab9230ee20f5/f5d4ff9eb95d0ed1cc6c7dc470c06462.webp)
哪些场景的存储适合HBase ?
![](https://filescdn.proginn.com/f47afb48a4c6eaeb58e4e7f1a7d6bf5b/f3a6c91b81f4800bf99d497789aca200.webp)
![](https://filescdn.proginn.com/feb7e79a3bbfb7c323bd888b97fa48a3/cef0930f6383cb38d2b7f6be34226252.webp)
![](https://filescdn.proginn.com/0009a43e9e9f21dea41c70a14a369a0c/6fa34472f26aa82be6e1d43254865d39.webp)
![](https://filescdn.proginn.com/8400e5e73dcc6fbde308c20807bb67ae/50ea3310346a418f489f7094947a112c.webp)
![](https://filescdn.proginn.com/4b3ec8fba35d2691bf9d5c9dcfc320e5/9f138848538da185b1f0c0f53d7820dd.webp)
![](https://filescdn.proginn.com/9707fa6b1f66d6884d7d6bd016fdb988/239067d7ca04d7c0e1777493257e031b.webp)
![](https://filescdn.proginn.com/3c8cb21430b15d4c395d16d73fc5c909/73c4bd15d58f3cf5bc414feba0e2ddff.webp)
![](https://filescdn.proginn.com/935febfd643073479b4da00478becd69/4cd21bbe5e3d6e85c3e5c173af84ae75.webp)
![](https://filescdn.proginn.com/cf1417ca6d33d62a09e50242014854a7/5943605148a51c88026f4955e36c2104.webp)
![](https://filescdn.proginn.com/0183ba71a7c945f9f2d29dc3f3302994/30478499ea064489cce9f5ab56ac98f2.webp)
![](https://filescdn.proginn.com/8ef61b2e6b01d5515238655d4711dc04/56e01262b81a4e2b3b01f930a6057777.webp)
HBase不是MySQL的替换,HBase是业务规模及场景扩张后,对MySQL的自然延伸
![](https://filescdn.proginn.com/608a5fd8a82f9da5181a0526e6e2b90e/12391f03b394f72e1004998dbab434fc.webp)
评论