转载:HBase

HBase实际上是按照谷歌的bigtable实现的,而谷歌在bigtable论文的开篇就介绍了bigtable的特点:A Bigtable is a sparse, distributed, persistent multidimensional sorted map。所以HBase在本质上,是一张有序的多维map,数据模型可以抽象成:


作者:EchoZhan

链接:https://www.jianshu.com/p/0f9578df7fbc


2.1 存储概览
a. 数据分片存储

在HBase中,一张表的数据会被分成几份,每一份数据为一个region;每个region内存储的key是连续范围内的,不同region存储的key范围不重合;这些region可能被存储在同一台机器上,也可能存储在不同的机器上。HBase作为一个分布式数据库,对数据进行分片,可以提升吞吐量。

b. HLog:Write-Ahead-Log,写操作先写日志

HLog的作用是,当一台regionServer crash了,可以利用HLog来恢复内存中未持久化到硬盘中的数据。需要注意的是,同一台server上的所有region共用一个HLog实例,因为假如每个region拥有一个独立的HLog,服务器会花费很多时间在磁盘寻道上。

c. MemStore:写缓存,每个store拥有独立的写缓存

在HBase中,所有的写操作全部写到内存中,当写缓存(MemStore)写满,再刷写(flush)到磁盘中[2],形成一个新的文件。这样做的目的,是为了高速响应那些写请求。

d. HFile:磁盘文件

在存储上,HBase完全依赖HDFS,磁盘操作是直接调用HDFS的API(HDFS在维持data locality这一点上足够智能)。另外,之前提过HBase定义列族的一个原因是为了方便存储,事实上,同一列族的数据会被写到同一文件,因为存储特性本来就是按照列族定义的。HBase的数据在底层文件中时以KeyValue键值对的形式存储的,HBase没有数据类型,HFile中存储的是字节,这些字节按字典序排列。

e. 读缓存:同一server上所有region共用

既然HBase有写缓存,相对应的应该有读缓存。与写缓存不同的是,HBase的读缓存是同一server上的所有region共用的。当HBase读取磁盘上某一条数据时,HBase会将整个HFile block[3]读到cache中[4]。因此,当client请求临近的数据时,因为临近数据已经被缓存到内存中,HBase的响应会更快,也就是说,HBase鼓励将那些相似的,会被一起查找的数据存放在一起。另外,当我们在做全表扫描时,为了不刷走读缓存中的热数据,千万记得关闭读缓存的功能。

2.3 将随机写转化成顺序写

HBase的存储是完全基于HDFS的,而HDFS的特点是不能对磁盘文件进行随机修改。因此,HBase无法对已写入磁盘文件的表记录进行随机修改,但是对于数据库来说,支持对表记录进行随机修改是基本功能。为此,HBase的方法是将随机写的操作转化成顺序写。

首先,随机的写操作转化为文件追加操作,按照时间顺序排列,client读数据时总是优先读到最新的修改。而删除操作则转化为写入一个tombstone标记,标记着早于这个tombstone时间戳的对应行所有记录作废。

显然,因为HBase总是进行文件追加,随着时间积累,文件膨胀很快。major compact的一个作用就是,真正删除所有无效的过时数据。



作者:EchoZhan
链接:https://www.jianshu.com/p/0f9578df7fbc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:EchoZhan
链接:https://www.jianshu.com/p/0f9578df7fbc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:EchoZhan
链接:https://www.jianshu.com/p/0f9578df7fbc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值