Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hbase与MySQL对比,区别是什么?

Hbase与MySQL对比,区别是什么?

作者头像
良月柒
发布于 2021-11-10 01:51:52
发布于 2021-11-10 01:51:52
1.4K0
举报
作者:庄小焱

来源:https://blog.csdn.net/weixin_41605937/article/details/110933984

MySQL + HBase是我们日常应用中常用的两个数据库,分别解决应用的在线事务问题和大数据场景的海量存储问题。

# 从架构对比看差异

相比MySQL,HBase的架构特点:

1.完全分布式(数据分片、故障自恢复)

2.底层使用HDFS(存储计算分离)。

由架构看到的能力差异:

1. MySQL:运维简单(组件少)、延时低(访问路径短)

2.HBase:扩展性好、内置容错恢复与数据冗余

# 从引擎结构看差异

相比MySQL,HBase的内部引擎特点:

1. HBase原生没有sQL引擎(无法使用sQL访问,使用APlI),云HBase增强版(Lindorm)及开源Phoenix均提供sQL能力

2.HBase使用LSM(Log-Structure Merge)树,,Innodb使用B+树。

由引擎结构(B+Tree vs LSM Tree)看到的能力差异:

1.MySQL:读写均衡、存在空间碎片

2. 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

HBase的特色功能—多版本

HBase的特色功能—多列簇

HBase的特色功能—MOB

# 从生态看差异

MySQL:满足APP的在线数据库存储,一般有我足矣

大数据圈:应用于大数据场景的存储、计算及管理组件

MySQL:一般可独立满足在线应用的数据存储需求,或者与少量组件配合(如缓存、分库中间件)

HBase:一般需要和较多大数据组件一起配合完成应用场景,场景架构的设计、实施存在较大的挑战

# 总结

# 哪些场景的存储适合HBase ?

HBase不是MySQL的替换,HBase是业务规模及场景扩张后,对MySQL的自然延伸

<END>

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
见识一下SQL Server隐式转换处理的不同
隐式转换(Implicit Conversion)就像他的名字一样,是个隐秘、不容易被发现的问题,但归根结底,还是设计开发中未遵守相关的规范,或者说是不良的设计开发习惯所导致的。
bisal
2021/09/06
1.2K0
见识一下SQL Server隐式转换处理的不同
【云和恩墨大讲堂】谈Oracle表新增字段的影响
作者简介 刘晨,网名bisal,Oracle 10g/11g OCM,并国内首批Oracle YEP成员,博客:blog.itpub.net/bisal 很多人在做一些表设计时会留出几个reverse
数据和云
2018/03/07
2.6K0
【云和恩墨大讲堂】谈Oracle表新增字段的影响
Oracle查看分析执行计划、建立索引以及SQL优化
Step2: select * from table(dbms_xplan.display)
chenchenchen
2022/03/09
4.4K0
Oracle查看分析执行计划、建立索引以及SQL优化
新增字段的一点一滴技巧
在Oracle中给表新增字段的需求,已经写了不少文章了,太多的经历告诉我们,一个简单的需求,如果不了解背后的原理,就很可能出现性能问题。
bisal
2019/12/25
1.2K0
【DB笔试面试570】在Oracle中,SQL优化在写法上有哪些常用的方法?
一般在书写SQL时需要注意哪些问题,如何书写可以提高查询的效率呢?可以从以下几个方面去考虑:
AiDBA宝典
2019/09/29
3.8K0
【DB笔试面试666】在Oracle中,高并发高负载情况下,如何给表添加字段、设置DEFAULT值
在Oracle中,在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?
AiDBA宝典
2019/10/25
3.8K0
浅谈数据库Join的实现原理
Join的实现算法有三种,分别是Nested Loops Join, Merge Join, Hash Join。 DB2、SQL Server和Oracle都是使用这三种方式,不过Oracle选择使用nested loop的条件跟SQL Server有点差别,内存管理机制跟SQL Server不一样,因此查看执行计划,Oracle中nested loops运用非常多,而merge和hash方式相对较少,SQL Server中,merge跟hash方式则是非常普遍。 一.Nested Loopsb Join
企鹅号小编
2018/02/07
5.8K0
浅谈数据库Join的实现原理
CBO 查询转换(2):反结合的NULL识别机能(null aware anti-join )
本文作者系杨昱明,现就职于甲骨文公司,从事数据库方面的技术支持。希望能通过发表文章,把一些零散的知识再整理整理。个人主页:https://blog.csdn.net/weixin_50513167,经其本人授权发布。
SQLplusDB
2022/08/19
3100
Oracle性能优化-子查询到特殊问题
编辑手记:前面我们介绍常用的子查询优化方法,但总有一些情况时在规律之外。谨慎处理方能不掉坑。 前文回顾: 性能优化之查询转换 - 子查询类 将SQL优化做到极致 - 子查询优化 作者简介: 韩锋
数据和云
2018/03/07
2K0
Oracle性能优化-子查询到特殊问题
关于索引和空值的讨论(r3笔记第80天)
在日常的工作中,空值总是有特殊的身份,对于它的处理有时候也是比较纠结。 有时候创建索引的时候会因为空值出现一些奇怪的结果。 有时候一个简单的查询因为空值却走不了索引。 有时候却因为空值而能走索引。 我们来简单的模拟一下这些问题。 首先创建一个空表,注意对于id列我们是加了not null的约束的。 SQL> create table index_test(id number not null,name varchar2(30) ) ; Table created. 我们创建一个唯一性索引,包含了id
jeanron100
2018/03/15
7780
新增非空约束字段在不同版本中的演进
开发提了一个数据库变更需求,新增一字段,没有NOT NULL非空约束,但有默认值为NULL。看起来有些奇怪,因为若字段允许NULL,其默认值就是NULL,不用显示声明,可以创建一个无DEFAULT NULL的新增字段再查看desc表结构,就可以证明这点。
bisal
2019/01/29
3.6K0
107-改进写法,让SQL执行效率更上一层楼
其中 demo101_t1(以下简称t1)和demo101_t2(以下简称t2)都是大表(几千万以上记录), 两表关联字段上重复值都比较少,如果t2表上不创建合适的索引, 这个SQL的执行效率将会是极差的(t2表做几千万次的全表扫描,估计要执行几天吧),执行计划是这样的:
老虎刘
2023/09/01
2670
107-改进写法,让SQL执行效率更上一层楼
OB 运维 | 一个关于 NOT IN 子查询的 SQL 优化案例
前段时间碰到一个慢 SQL,NOT IN 子查询被优化器改写成了 NESTED-LOOP ANTI JOIN,但是被驱动表全表扫描无法使用索引,执行耗时 16 秒。SQL 如下:
爱可生开源社区
2024/04/11
2140
OB 运维 | 一个关于 NOT IN 子查询的 SQL 优化案例
NULL判断对SQL的影响
看到一条SQL,很具迷惑性,原始语句包含了业务属性,因此使用模拟的操作来复现这个问题。
bisal
2021/09/06
1.1K0
NULL判断对SQL的影响
Oracle优化04-Optimizer优化器
Oracle数据库中的优化器是SQL分析和执行的优化工具,它负责制定SQL的执行计划,也就是它负责保证SQL执行效率最高.
小小工匠
2021/08/16
1.3K0
谈一谈in/exists , not in/not exists
这个话题应该很多人写过了,多数是在分析in/exists哪个写法效率高;not in/not exists是否等价等问题。老虎刘这里再补充点内容。
老虎刘
2022/06/22
6480
盘点MySQL慢查询的12个原因
日常开发中,我们经常会遇到数据库慢查询。那么导致数据慢查询都有哪些常见的原因呢?今天田螺哥就跟大家聊聊导致MySQL慢查询的12个常见原因,以及对应的解决方法。
捡田螺的小男孩
2023/02/24
1.6K0
盘点MySQL慢查询的12个原因
85-这些SQL调优小"技巧",你学废了吗?
下面这篇文章来自某微信公众号,作者收集了oracle 较早版本的一些SQL优化"技巧",文章标题起的很是诱人.
老虎刘
2022/06/22
1.2K0
深入浅出查询优化器
提示:公众号展示代码会自动折行,建议横屏阅读 「第一部分 查询优化器框架」 关系型数据库是一个通用系统软件,SQL作为一种结构化查询语言,用户不需要关注怎么做,只需要描述做什么,然后交由SQL引擎来处理。因为关系代数提供的等价性,同一个查询可以用不同的SQL语句描述。为防止用户所写的"不好的"SQL执行慢,这就需要查询优化器快速而准确地选择出一个效率较高的执行计划。 一般的查询优化器基于代价计算模型,包含SQL形态的变换,确定访问路径和多表连接顺序等几个重要的步骤。这些步骤被统一在一个优化器框架之内,相互
腾讯数据库技术
2021/06/02
2.1K0
表中已存重复数据的情况,如何增加唯一性约束?
这周某系统上线,有一个需求就是,为一张表修改唯一性约束,原因就是之前发现,由于唯一性约束设置不当,导致业务处理出现异常。
bisal
2019/01/30
2.3K0
推荐阅读
相关推荐
见识一下SQL Server隐式转换处理的不同
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档