【每日五分钟搞定大数据】系列,HBase第一篇html
结束了Zookeeper篇, 接下来咱们来讲下Google三驾马车之一BigTable的开源实现:HBase,要讲的内容暂定以下:
数据库
这是第一篇咱们先不聊技术实现,只讨论特性和场景并发
1. 写密集型应用,天天写入量巨大,而相对读数量较小的应用分布式
2. 不须要复杂查询条件来查询数据的应用高并发
使用rowkey,单条记录或者小范围的查询性能不错,大范围的查询因为分布式的缘由,可能在性能上有点影响。性能
使用HBase的过滤器的话性能比较差。大数据
3. 不须要关联的场景,HBase为NoSQL没法支持join设计
4. 可靠性要求高日志
master支持主备热切。code
regionServer宕机,region会分配给在线的机器。
数据持久化在HDFS,默认3份,HDFS保证数据可靠性。
内存的数据若丢失能够经过Wal预写日志恢复。
5. 数据量较大,并且增加量没法预估的应用
HBase支持在线扩展,即便在一段时间内数据量呈井喷式增加,也能够经过HBase横向扩展来知足功能。
HBase MOB(Medium Object Storage),中等对象存储是hbase-2.0.0版本引入的新特性,用于解决hbase存储中等文件(0.1m~10m)性能差的问题。这个特性适合将图片、文档、PDF、小视频存储到Hbase中。
Kylin的底层用的是HBase的存储,看中的是它的高并发和海量存储能力。kylin构建cube的过程会产生大量的预聚合中间数据,数据膨胀率高,对数据库的存储能力有很高要求。
Phoenix是构建在HBase上的一个SQL引擎,经过phoenix能够直接调用JDBC接口操做Hbase,虽然有upsert操做,可是更多的是用在OLAP场景,缺点是很是不灵活。
openTsDB应用,记录以及展现指标在各个时间点的数值,通常用于监控的场景,是HBase上层的一个应用。
动态列,稀疏列的特性。用于描述用户特征的维度数是不定的且可能会动态增加的(好比爱好,性别,住址等);不是每一个特征维度都会有数据
强一致性,良好的读性能,至于hbase如何保证强一致性的后面的文章会详细说明。
见下面的一波分析。
前几天听说支持八个一线明星并发出轨的微博挂了....蹭个热度,上面的系统我就不一一说了,你们应该知道微博是典型的feed流系统,那咱们来详细说下feed流系统。
feed流系统有三个概念,如图(来自云栖社区)
feed:
一个终端发布的一些内容
好比你在微博发了条动态,那这条动态就是feed
feeds流;
feeds流就是系统实时推送的根据了必定规则排序的信息流
好比你刷了下微博,在你的首页出现了按时间排好序的一堆新消息,那这就是feed流
feeds订阅;
这个比较简单,就是你经过应用,微博,朋友圈这些,关注了某我的,那就是订阅了Ta的feeds
Feed流系统中须要存储的内容大体能够分为两部分,
其实有不少方案实现,可是这篇说的是HBase,那咱们就说说如何用HBase实现。
关注列表就不重点讨论了,数据特色是:列数量不定,量大,关系简单,有序,性能要求高,可靠性要求高。互相关注,单向关注这种场景用二级索引很好实现。
数据的特色:
1.读多写少,举个栗子,看我文章的人里面有多少人是暗中观察的,不评论不点赞本身也不发文章的,这样“暗中观察”的同窗占总用户的比例是很大的。
2.数据模型简单,消息时间,消息体,发布人,订阅人,不多会有须要关联的场景
3.高并发,波峰波谷式访问,Feed流系统属于社交类系统,热点来得快去得也快。
4.持久化可靠性存储
每一个人发布的内容都是须要永久存储且不能丢失的,存储量会随着时间的推移会愈来愈大。须要系统有很强的扩展性和可靠性。
5.消息排序,HBase的rowKey按字典序排序正好适用于这个场景。好比rowkey能够设计成这样
<userId><timestamp><feedId>
这样获取某个用户发布的消息时就能够指定时间范围来scan,性能不错的同时还能保证时间线正确。
从上面feed数据的特性能够看出,HBase是适合作feed流系统的,实际生产中也确实有feed流应用是用HBase来作的存储,
我这里只是一个初步的讨论,实际上仍是有不少细节要考虑的,光靠HBase来实现确定是远远不够的,它也有不少不适用的地方,要靠开发者本身去判断,
没有最好的只有最合适的,但愿对你们有帮助。