Mysql 与 HBase技术选型
参考博客:https://blog.****.net/daxiang12092205/article/details/52077938
MySQL + HBase 是我们日常应用中常用的两个数据库,分别解决应用的在线事务问题和大数据场景的海量存储问题
在最近的一些版本中,引入了OffHeap降低gc影响,优化链路延迟,提供Replica等可以满足在线的需求。引入MOB,可以存储10M左右的对象,完全适应了对象存储。另外由于自身的并发能力、存储能力,可以说是具有最为竞争力的引擎
1. 如果你选择Mysql或者是HBase时候,你是通过什么标准来选择得呢???
如果你正在设计一个系统,这个系统致力于解决大数据的问题,或者是需要融入到其他Hadoop项目中,那么请选择HBase
如果你能够将数据存储在表格里,并且数据量不大,也不做相应的数据分析,那么请选择Mysql
2. HBase不是来取代Mysql的,在未来也不会向这个方向发展
HBase是被设计用来处理大规模数据的,在高并发的场景下有独特的优势
存储少于100GB的数据,用HBase是没有优势的
3. 从各种方面对比两者的差异
1. 从架构看差异
相比Mysql,HBase架构特点1. 完全分布式,可扩展 2. 底层使用HDFS, 存储与计算分离
能力差异:HBase扩展性好,容错恢复 Mysql 运维简单,读性能好
2. 从引擎看差异(B+Tree vs LSM Tree)
Mysql 侧重读,存在空间碎片
HBase 侧重写,存储无碎片,数据导入能力强
3. 从数据访问看差异
Mysql的 sql功能丰富,事务能力强
HBase 既能通过API进行更加灵活,性能更好的访问,又可通过Phonenix使用标准sql访问。只支持单行事务
4. HBase特色功能
4.1 TTL功能 适用于无需永久保存的数据。如日志,监控,轨迹,浏览记录,费用详单
可提升性能,易于开发
4.2 动态列:1. 无须定义,直接插入新字段 2. 单表字段可达百万个 3. 空字段不占用存储空间
适用于表结构经常调整,字段非常多的数据。 用户画像,安全分控
需要维护人或设备 的大量纬度,且需要频繁变更字段来准确衡量各维度的数据价值
4.3 多版本:1. 数据更新后,旧数据依然可访问 2. 旧版本数量可设定,超过数量自动删除多余版本
适用维护最近N次变更值得数据,如浏览记录,轨迹记录,登陆记录,交易记录
经常用于实时推荐,安全风控,营销圈人等场景
4.4 多列蔟 1. 某些列物理上存放在一起,一个文件 2. 提高压缩率 3. 减少非相关列查询时性能影响
适用于列大小不同,访问频率不同,如网页,图片,音频,视频等内容与元数据
经常用于搜索,人脸识别,多媒体等场景
4.5 MOB 1. 适用于存储中等大小得数据(100kb——100mb)
大于10MB存储到HDFS
2. 与多列蔟特性相配合,常用于搜索,人脸识别,多媒体等场景
5. HBase得应用场景
-
对象存储:我们知道不少的头条类、新闻类的的新闻、网页、图片存储在HBase之中,一些病毒公司的病毒库也是存储在HBase之中
-
时序数据:HBase之上有OpenTSDB模块,可以满足时序类场景的需求
-
推荐画像:特别是用户的画像,是一个比较大的稀疏矩阵,蚂蚁的风控就是构建在HBase之上
-
时空数据:主要是轨迹、气象网格之类,滴滴打车的轨迹数据主要存在HBase之中,另外在技术所有大一点的数据量的车联网企业,数据都是存在HBase之中
-
CubeDB OLAP:Kylin一个cube分析工具,底层的数据就是存储在HBase之中,不少客户自己基于离线计算构建cube存储在hbase之中,满足在线报表查询的需求
-
消息/订单:在电信领域、银行领域,不少的订单查询底层的存储,另外不少通信、消息同步的应用构建在HBase之上
-
Feeds流:典型的应用就是xx朋友圈类似的应用
-
NewSQL:之上有Phoenix的插件,可以满足二级索引、SQL的需求,对接传统数据需要SQL非事务的需求