在线手机网站预览,网站开发php程序员,西部数码网站管理助手 ftp上传文件失败,遵义做什么网站好一、 HBase 定义
Apache HBase™ 是以 hdfs 为数据存储的#xff0c;一种分布式、可扩展的 NoSQL 数据库。
二、 HBase 数据模型
HBase 的设计理念依据 Google 的 BigTable 论文#xff0c;论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排…一、 HBase 定义
Apache HBase™ 是以 hdfs 为数据存储的一种分布式、可扩展的 NoSQL 数据库。
二、 HBase 数据模型
HBase 的设计理念依据 Google 的 BigTable 论文论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排序 map。 之后对于映射的解释如下 该映射由行键、列键和时间戳索引映射中的每个值都是一个未解释的字节数组。 最终 HBase 关于数据模型和 BigTable 的对应关系如下 HBase 使用与 Bigtable 非常相似的数据模型。用户将数据行存储在带标签的表中。数 据行具有可排序的键和任意数量的列。该表存储稀疏因此如果用户喜欢同一表中的行可 以具有疯狂变化的列。 最终理解 HBase 数据模型的关键在于稀疏、分布式、多维、排序的映射。其中映射 map 指代非关系型数据库的 key-Value 结构。 1Name Space 命名空间类似于MSYQL的数据库每个命名空间下有多个表。HBase 两 个自带的命名空间分别是 hbase 和 defaulthbase 中存放的是 HBase 内置的表default
2Table 类似于MYSQL的表。不同的是HBase 定义表时只需要声明列族即可不需 要声明具体的列。因为数据存储时稀疏的所有往 HBase 写入数据时字段可以动态、按需指定。因此和关系型数据库相比HBase 能够轻松应对字段变更的场景。 3Row 类似于MYSQL中的每一行。HBase 表中的每行数据都由一个 RowKey 和多个 Column列组成数据是按照 RowKey 的字典顺序存储的并且查询数据时只能根据 RowKey 进行检索所以 RowKey 的设计十分重 要。 4Column 类似于MYSQL中创建表需要指定的字段。HBase 中的每个列都由 Column Family(列族)和 Column Qualifier列限定符进行限定例如 infonameinfoage。建表时只需指明列族而列限定符无需预先定义。 5Time Stamp 用于标识数据的不同版本version每条数据写入时系统会自动为其加上该字段 其值为写入 HBase 的时间。时间戳用来定义数据的状态hbase底层是hdfs所有没有真正意义上的删除和修改。修改主要是通过底层插入新的数据通过时间戳覆盖旧的数据实现数据的修改。删除也是是通过底层插入新的数据通过时间戳覆盖旧的数据实现数据的修改只不过数据的类型是delete。 6Cell 由{rowkey, column Familycolumn Qualifier, timestamp} 唯一确定的单元。cell 中的数 据全部是字节码形式存贮。
三、HBase 逻辑结构
逻辑结构类似于MYSQL 四、物理存储结构
以下是实际操作演示可以更加直观的看到数据的存储方式
在bigdata的项目空间里面创建一张有persional_info,office_info两个列族的teacher表。
create bigdata:teacher,persional_info,office_info根据hbase创建表的方式就可以看出hbase只要求指定列族而不需要指定具体的列(也就是mysql中的字段名)从而也可以得处hbase为什么支持列动态扩展。 put bigdata:teacher,1001,persional_info:name,zhangsan
put bigdata:teacher,1001,persional_info:city,shanghai
put bigdata:teacher,1001,persional_info:phone,18100070908
put bigdata:teacher,1001,office_info:tel,010-1111111
put bigdata:teacher,1001,office_info:address,dongfangmingzhuget bigdata:teacher,1001查询插入的表数据可以发现hbase内部的存储结构 列族字段名 时间戳 值 看到下面这张图相信大家应该也能理解hbase为什么叫列式存储key-value结构。 其实我们可以先简单想象成无非就是把每列抽出来然后关联上rowkey。这个叫列式存储
当然要想实现增删改查每一列只关联上rowkey是无法实现的还需要有ColumnFamily列族Column Qualifier列修饰符TimeStamp时间戳–版本KeyType类型。 并且hbase的key也不是单单指rowkey而是 Key由RowKey(行键)ColumnFamily列族Column Qualifier列修饰符TimeStamp时间戳–版本KeyType类型组成而Value就是实际上的值。
下面是hbase每条数据的内部结构图 这个hbase查询全表返回的数据格式类似于MYSQL的select * from teacher 对比上面的例子其实很好理解因为我们修改一条数据其实上是在原来的基础上增加一个版本的那我们要准确定位一条数据那就得RowKeyColumn时间戳。 KeyType是什么我们上面只说了「修改」的情况你们有没有想过如果要删除一条数据怎么做实际上也是增加一条记录只不过我们在KeyType里边设置为“Delete”就可以了。
**修改操作**可以看出添加一条新的数据就会覆盖了旧的数据。 删除操作从图中大家可以看出虽然删除了那条数据却出现了一条新的数据不过时间戳小于刚刚的那条数据。其实这就是hbase的删除机制数据没有真正的删除只不过是类型状态修改为Delete修改也没有真正意义的修改只不过是新插入一条数据覆盖了旧的数据。当新的数据被定义为删除的时候就会看到旧的数据。hbase的查询都是根据状态为未删除的最新时间戳的一条数据为准。