发表于9小时前(2016-05-11 23:51) 阅读( 90 ) | 评论() 0 人收藏此文章,
赞 0
上海源创会5月15日与你相约【玫瑰里】,赶快来约哦~!>>>
摘要 HBase是一个分布式的、持久的、强一致性的存储系统,具有近似最优的写性能(能使IO利用率达到饱和)和出色的读性能,它充分利用了磁盘空间,支持特定的列族切换,可选压缩算法。
所以,一个HBase的Table存取模式为:
` (Table, RowKey, Family, Qualifier, Timestamp) -> Value
一个Table存取等价于高级语言的一个map: ``SortedMap<RowKey, List<SortedMap<Qualifier, List<
Value, Timestamp > > >
` 或者,再直观一点,逻辑上等价于一个固定格式的Json:
` { "RowKey1" { "Family1": { "Qualifier11":{ "Timestamp111":"Value111" } "Qualifier12":{ "Timestamp121":"Value121", "Timestamp122":"Value122" } }
"Family2" : { "Qualifier21":{ "Timestamp211":"Value211" } } } "RowKey2" { ... }
} ```
也叫StoreFile, google论文中是SSTable ,是数据存储的地方,HBase之所以是面向列的数据库,是因为数据以key-value形式存储的,列可以动态扩展
当put到hbase一个key和value的时候,会增加一条记录:
` (Table, RowKey, Family, Qualifier, Timestamp) -> Value
` 该记录以字节流的方式存储,对应到磁盘中的存储格式为:
多个KeyValue结构,按照Key递增的顺序,组成一个BlockData(默认64K),BlockData在HFile存在磁盘中的存储方式为:
DataBlock是对BlockData的进一步封装,在BlockData基础上,增加了一个8字节的标志位,magic number,用来标记BlockData的类型,常见的标记类型有: * DATA,就是BlockData类型 * LEAF INDEX,叶子索引块 * BLOOM CHUNK ,Bloom filter块(Bloom Filter是采用位hash标记,常数时间内可以判断key是否存在的一种数据结构) * ...(等等)
由以下四部分组成: * Scanned Block section,扫描数据存储部分 + Data Block,数据块 + leaf block index,索引块 + Bloom chunk blocks,Bloom chunk块 * Non-scanned block section,非扫描数据存储部分 + Meta Block + intermediate-level index blocks * load-on-open section,打开HFile文件的时候,这部分需要加载到内存,包括文件信息和索引信息。 * Trailer,一个固定长度,记录了HFile的基本信息、各个部分的偏移值和寻址信息。
官方文档
Transcript of HBase for Architects Presentation
《HBase权威指南》
转载请注明出处:http://my.oschina.net/serverx