Hbase中的数据模型

首先看一下Hbase的数据整体流向图:

       Hbase上Regionserver的内存分为两个部分,一部分作为Memstore,主要用来写;另外一部分作为BlockCache,主要用于读数据;这里主要介绍写数据的部分,即Memstore。当RegionServer(RS)收到写请求的时候(writerequest),RS会将请求转至相应的Region。每一个Region都存储着一些列(a set of rows)。根据其列族的不同,将这些列数据存储在相应的列族中(Column Family,简写CF)。不同的CF中的数据存储在各自的HStore中,HStore由一个Memstore及一系列HFile组成。Memstore位于RS的主内存中,而HFiles被写入到HDFS中。当RS处理写请求的时候,数据首先写入到Memstore,然后当到达一定的阀值的时候,Memstore中的数据会被刷到HFile中。

       用到Memstore最主要的原因是:存储在HDFS上的数据需要按照row key 排序。而HDFS本身被设计为顺序读写(sequential reads/writes),不允许修改。这样的话,HBase就不能够高效的写数据,因为要写入到HBase的数据不会被排序,这也就意味着没有为将来的检索优化。为了解决这个问题,HBase将最近接收到的数据缓存在内存中(in Memstore),在持久化到HDFS之前完成排序,然后再快速的顺序写入HDFS。

HBase是一个开源的非关系型分布式数据库,它是Apache Software Foundation的Hadoop项目的一部分。HBase使用了Google的Bigtable作为其数据模型的基础,其数据模型主要基于列式存储。HBase数据模型可以概括为以下几个主要概念: 1. 表(Table):在HBase中,数据被组织成表,表可以看作是行的集合。每个表由一个或多个列族组成,表的结构在创建后可以动态改变。 2. 行(Row):表中的数据以行的形式存储,每行由唯一的行键(Row Key)标识。行键是字节串,用于确定行的存储位置,因此它对性能有很大影响。由于行键的排序,可以快速检索具有相似行键的行。 3. 列族(Column Family):列族是表的基本组织单位,它是一组相关的列的集合。列族中的列通过列限定符(Column Qualifier)来区分。列族在表创建时定义,并且在之后的任何时候都可以添加新的列族,但不能删除或修改现有的列族。 4. 单元格(Cell):单元格存储实际的数据值,每个单元格包含多个版本的数据。每个单元格都有一个时间戳,用于区分同一个列限定符下不同版本的数据。时间戳可以由系统自动生成,也可以在写入数据时显式指定。 5. 时间戳(Timestamp):每个单元格中的数据都有一个时间戳,它表示数据被写入的时间。时间戳用于数据版本控制,可以用来检索或删除特定版本的数据。 6. 命名空间(Namespace):命名空间可以看作是表的逻辑分组,它允许用户将表组织到不同的分组中。命名空间提供了权限管理和资源隔离的机制。 在HBase中,数据模型的设计使得它特别擅长处理大数据集和快速的读写操作。由于其列式存储和压缩特性,HBase适合处理稀疏数据集和具有不同访问模式的工作负载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值