HBase篇(1)-特性与应用场景
【每日五分钟搞定大数据】系列,HBase第一篇
结束了Zookeeper篇, 接下来我们来说下Google三驾马车之一BigTable的开源实现:HBase,要讲的内容暂定如下:
这是第一篇我们先不聊技术实现,只讨论特性和场景
hbase的特点
- 千万级高并发
- PB级存储
- 非结构化存储
- 动态列,稀疏列
- 支持二级索引
- 强一致性,可靠性,扩展性(CP系统,可用性做了一点让步)
场景
1. 写密集型应用,每天写入量巨大,而相对读数量较小的应用
2. 不需要复杂查询条件来查询数据的应用
使用rowkey,单条记录或者小范围的查询性能不错,大范围的查询由于分布式的原因,可能在性能上有点影响。
使用HBase的过滤器的话性能比较差。
3. 不需要关联的场景,HBase为NoSQL无法支持join
4. 可靠性要求高
master支持主备热切。
regionServer宕机,region会分配给在线的机器。
数据持久化在HDFS,默认3份,HDFS保证数据可靠性。
内存的数据若丢失可以通过Wal预写日志恢复。
5. 数据量较大,而且增长量无法预估的应用
HBase支持在线扩展,即使在一段时间内数据量呈井喷式增长,也可以通过HBase横向扩展来满足功能。
应用
- 对象存储系统
HBase MOB(Medium Object Storage),中等对象存储是hbase-2.0.0版本引入的新特性,用于解决hbase存储中等文件(0.1m~10m)性能差的问题。这个特性适合将图片、文档、PDF、小视频存储到Hbase中。
- OLAP的存储
Kylin的底层用的是HBase的存储,看中的是它的高并发和海量存储能力。kylin构建cube的过程会产生大量的预聚合中间数据,数据膨胀率高,对数据库的存储能力有很高要求。
Phoenix是构建在HBase上的一个SQL引擎,通过phoenix可以直接调用JDBC接口操作Hbase,虽然有upsert操作,但是更多的是用在OLAP场景,缺点是非常不灵活。
- 时序型数据
openTsDB应用,记录以及展示指标在各个时间点的数值,一般用于监控的场景,是HBase上层的一个应用。
- 用户画像系统
动态列,稀疏列的特性。用于描述用户特征的维度数是不定的且可能会动态增长的(比如爱好,性别,住址等);不是每个特征维度都会有数据
- 消息/订单系统
强一致性,良好的读性能,至于hbase如何保证强一致性的后面的文章会详细说明。
- feed流系统存储
见下面的一波分析。
feed流系统
前几天据说支持八个一线明星并发出轨的微博挂了....蹭个热度,上面的系统我就不一一说了,大家应该知道微博是典型的feed流系统,那我们来详细说下feed流系统。
什么是feed流系统
feed流系统有三个概念,如图(来自云栖社区)

feed:
一个终端发布的一些内容
- 可以是用户发布的动态消息
- 可以是广告系统推荐的广告
- 也可以是系统本身推荐的一些公告
比如你在微博发了条动态,那这条动态就是feed
feeds流;
feeds流就是系统实时推送的根据了一定规则排序的信息流
比如你刷了下微博,在你的首页出现了按时间排好序的一堆新消息,那这就是feed流
feeds订阅;
这个比较简单,就是你通过应用,微博,朋友圈这些,关注了某个人,那就是订阅了Ta的feeds
Feed流系统的存储
Feed流系统中需要存储的内容大致可以分为两部分,
- 账号关系数据(比如关注列表)
- Feed消息内容
其实有很多方案实现,但是这篇说的是HBase,那我们就说说如何用HBase实现。
关注列表
关注列表就不重点讨论了,数据特点是:列数量不定,量大,关系简单,有序,性能要求高,可靠性要求高。互相关注,单向关注这种场景用二级索引很好实现。
Feed消息
数据的特点:
1.读多写少,举个栗子,看我文章的人里面有多少人是暗中观察的,不评论不点赞自己也不发文章的,这样“暗中观察”的同学占总用户的比例是很大的。
2.数据模型简单,消息时间,消息体,发布人,订阅人,很少会有需要关联的场景
3.高并发,波峰波谷式访问,Feed流系统属于社交类系统,热点来得快去得也快。
4.持久化可靠性存储
每个人发布的内容都是需要永久存储且不能丢失的,存储量会随着时间的推移会越来越大。需要系统有很强的扩展性和可靠性。
5.消息排序,HBase的rowKey按字典序排序正好适用于这个场景。比如rowkey可以设计成这样
<userId><timestamp><feedId>
这样获取某个用户发布的消息时就可以指定时间范围来scan,性能不错的同时还能保证时间线正确。
总结
从上面feed数据的特性可以看出,HBase是适合做feed流系统的,实际生产中也确实有feed流应用是用HBase来做的存储,
我这里只是一个初步的讨论,实际上还是有很多细节要考虑的,光靠HBase来实现肯定是远远不够的,它也有很多不适用的地方,要靠开发者自己去判断,
没有最好的只有最合适的,希望对大家有帮助。

HBase篇(1)-特性与应用场景的更多相关文章
- 《HBase在滴滴出行的应用场景和最佳实践》
HBase在滴滴出行的应用场景和最佳实践 背景 对接业务类型 HBase是建立在Hadoop生态之上的Database,源生对离线任务支持友好,又因为LSM树是一个优秀的高吞吐数据库结构,所以同时 ...
- 二、RabbitMQ 进阶特性及使用场景 [.NET]
前言 经过上一篇的介绍,相信大家对RabbitMQ 的各种概念有了一定的了解,及如何使用RabbitMQ.Client 去发送和消费消息. 特性及使用场景 1. TTL 过期时间 TTL可以用来指定q ...
- 解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)
解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译) http://improve.dk/orcamdf-feature-recap/ 时间过得真快,这已经过了大概四个月了自从我最初介绍我 ...
- HBase指定大量列集合的场景下并发拉取数据时卡住的问题排查
最近遇到一例,HBase 指定大量列集合的场景下,并发拉取数据,应用卡住不响应的情形.记录一下. 问题背景 退款导出中,为了获取商品规格编码,需要从 HBase 表 T 里拉取对应的数据. T 对商品 ...
- Redis高级特性及应用场景
Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...
- HBase篇(5)- BloomFilter
[每日五分钟搞定大数据]系列,HBase第五篇.上一篇我们落下了Bloom Filter,这次我们来聊聊这个东西. Bloom Filter 是什么? 先简单的介绍下Bloom Filter(布隆过滤 ...
- HBase篇(3)-架构详解
[每日五分钟搞定大数据]系列,HBase第三篇 聊完场景和数据模型我们来说下HBase的架构,在网上找了张比较清晰的图,我觉得这张图能说明很多问题,那这一篇我们就重点来解析下这张图 角色与职责 先介绍 ...
- HBase在滴滴出行的应用场景和最佳实践
摘要: 主要介绍了HBase和Phoenix在滴滴内部的一些典型案例.文章已在CSDN极客头条和<程序员>杂志发表,应朋友邀请,分享到云栖社区,希望给大家带来启发和帮助. 背景 对接业务类 ...
- 一条数据的HBase之旅,简明HBase入门教程3:适用场景
[摘要] 这篇文章继HBase数据模型之后,介绍HBase的适用场景,以及与一些关键场景有关的周边技术生态,最后给出了本文的示例数据 华为云上的NoSQL数据库服务CloudTable,基于Apach ...
随机推荐
- leetcode-66.加一
leetcode-66.加一 题意 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个 ...
- Android沉浸式状态栏的简单实现
随着卡片式设计在Android系统的上越来越流行,比如现在早已经烂大街的沉浸式状态栏,几乎所有的主流的APP都支持沉浸式状态栏,如QQ.UC浏览器等等.所以觉得有必要学习一下,找了点资料,总结了一下, ...
- Spring从认识到细化了解
目录 Spring的介绍 基本运行环境搭建 IoC 介绍: 示例使用: 使用说明: 使用注意: Bean的实例化方式 Bean的作用范围的配置: 补充: DI: 属性注入: 补充: IoC的注解方式: ...
- 获取url查询参数的方法
/** * 获取url查询参数的方法 * @param name * @returns {null} * @constructor */ function GetQueryString(name) { ...
- c/c++ 模板与STL小例子系列<三> traits
c/c++ 模板与STL小例子系列 traits 对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题. 从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介 ...
- emacs 绑定快捷键 c/c++
;;跳转到函数定义的地方 (global-set-key (kbd "C-<f2>") 'ggtags-find-definition) ; Control+F2 ;; ...
- java操作elasticsearch实现查询删除和查询所有
后期博客本人都只给出代码,具体的说明在代码中也有注释. 1.查询删除 //查询删除:将查询到的数据进行删除 @Test public void test8() throws UnknownHostEx ...
- [福大软工] Z班 团队作业——随堂小测(同学录) 作业成绩
团队作业--随堂小测(同学录) 作业链接 http://www.cnblogs.com/easteast/p/7763645.html 作业情况 本次作业从原先预计的3小时,有些组打了鸡血连续肝了4. ...
- Photoshop怎么破解?PS怎么破解?
Photoshop和PS这两个软件可以说是十分常见的图片处理软件了,Photoshop主要处理以像素所构成的数字图像进行图片编辑工作,而PS就更加强大了,它有很多功能,在图像.图形.文字.视频.出版等 ...
- kafka-connect-hdfs连接hadoop hdfs时候,竟然是单点的,太可怕了。。。果断改成HA
2017-08-16 11:57:28,237 WARN [org.apache.hadoop.hdfs.LeaseRenewer][458] - <Failed to renew lease ...
