hbase中的row key_HBase的储存,RowKey设计(一)

存储的逻辑视图:

1)行键(RowKey)

-- 行键是字节数组, 任何字符串都可以作为行键;--

表中的行根据行键进行排序,数据按照Row key的字节序(byte order)排序存储;-- 所有对表的访问都要通过行键

(单个RowKey访问,或RowKey范围访问,或全表扫描) (二级索引)

2)列族(ColumnFamily)

-- CF必须在表定义时给出

--

每个CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入

--

数据按CF分开存储,HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个Store),这种设计

非常适合于数据分析的情形

3)时间戳(TimeStamp)

-- 每个Cell可能又多个版本,它们之间用时间戳区分

4)单元格(Cell)

-- Cell 由行键,列族:限定符,时间戳唯一决定,数据全部以字节码形式存储

​5)区域(Region)

-- HBase自动把表水平(按Row)划分成多个区域(region),每个region会保存一个表里面某段连续的数据;

--

每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region;

-- 当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Region 上。

-- HRegion是HBase中分布式存储

和负载均衡的最小单元(默认256M)。最小单元表示不同的HRegion可以分布在不同的HRegionServer上。但一个HRegion不会拆分到多个server上。

HBase特点:

无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;

面向列:面向列(族)的存储和权限控制,列(族)独立检索;

​稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;

​Hbase的存储格式:

HBase中的每张表都通过行键按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过256M就要被分割成两个,由HRegionServer管理,管理哪些HRegion由HMaster分配。

HRegionServer存取一个子表时,会创建一个HRegion对象,然后对表的每个列族(Column

Family)创建一个Store实例,每个Store都会有0个或多个StoreFile与之对应,每个StoreFile都会对应一个HFile, HFile就是实际的存储文件。因此,一个HRegion有多少个列族就有多少个Store。另外,每个HRegion还拥有一个MemStore实例。memStore存储在内存中,StoreFile存储在HDFS上。

​Region虽然是分布式存储的最小单元,但并不是存储​

的最小单元。Region由一个或者多个Store组成,每个store保存一个columns

family;每个Store又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上。

HBase是基于BigTable的面向列的分布式存储系统,其存储设计是基于Memtable

/ SSTable设计​的,主要分为两部分,一部分为内存中的MemStore

(Memtable),另外一部分为磁盘(这里是HDFS)上的HFile

(SSTable)。还有就是存储WAL的log,主要实现类为HLog.​

​本质上MemStore就是一个内存里放着一个保存KEY/VALUE的MAP,当MemStore(默认64MB)写满之后,会开始刷磁盘操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值