概述
特性适用场景不适用场景Hbase 和 HDFS面向行和面向列Hbase的数据模型Hbase的Key-Value 概述
Hbase是分布式、面向列族的开源数据库,HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hbase提供高性能的计算能力,Zookeeper为Hbase提供稳定服务和Failover机制,可以说,Hbase是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。
特性 底层存储依赖于 HDFS面向列 适用场景 Hbase 适用于海量数据存储和准实时查询。Hbase能够应用在上百亿行*上百万列,实现百毫秒的查询;查询简单(基于rowkey或者rowkey查询范围)、不涉及复杂关联的环境,如:交通(红绿灯信息采集)、海量订单流水数据(长久保存)、交易记录、数据库历史数据。不需要 列类型,辅助索引,触发器,和高级查询语言的场景 不适用场景 数据量少时,例如几百万行甚至不到的数据量需要有复杂查询的场景 Hbase 和 HDFS HDFS适用于存储大容量文件的分布式文件系统,不支持快速单独记录查找,提供了高延迟批量处理,但是没有批处理的概念;提供的数据只能够顺序访问
Hbase是建立在HDFS之上的数据库,提供在较大的表快速查找,提供了数十亿并发低延迟访问单个行记录(随机存储),Hbase内部使用哈希表来提供随机接入,并且其存储索引,可以对 HDFS 文件中的数据进行快速查找。
行式:
列式:
可以很简单的发现,无非就是把每列抽出来,然后关联上Id。这个就叫列式存储吗?与行式存储有什么区别呐?可以看到以前的一行记录有多个属性列, 有部分的列是空缺的,但是我们还是需要留下存储的空间,但是在列式存储下就没有了这个问题,有什么才存什么,类似于 KV 结构 Hbase的数据模型
Hbase里边也有表、行和列的概念。(一行数据由一个行键和一个或多个相关的列以及它的值所组成)
在Hbase里边,定位一行数据会有一个唯一的值,这个叫做 行键(RowKey)。
Hbase 中列的相关概念:在Hbase里边,先有列族,后有列。Hbase的列(Column)都得归属到列族(Column Family)中。在Hbase中用列标识符(Column Qualifier)来标识每个列
具体到上面的场景就是:
在这里可以看出,如果我的 UserInfo:age 为空,那么这一列就没有,如果我要在 OrderInfo 列族中增加一行,那么就很简单的增加一列数据就行了。 Hbase的Key-Value
Hbase本质上其实就是Key-Value的数据库,上一次我们学Key-Value数据库还是Redis呢。那在Hbase里边,Key是什么?Value是什么?