深入学习hbase:表,列族,列标识,版本和cell
HBase是面向列的分布式的数据库,和传统的关系型数据库有很大的不同:物理模型和逻辑模型。这里我们要首先讲一下HBase数据库相关的区别于关系型数据库的几个基本概念:
表:HBase将数据组织到自己的HTable表中,这个表是根据列族(colomn family)在物理上保存数据的,每个列族都有自己的文件夹和storefiles,不像关系型数据库那样将一个表保存成一个文件,表明也是文件系统路径的一部分。
行:HBase中的行是逻辑上的行,物理上模型上行是按列族(colomn family)分别存取的。HBase有Rowkey的概念,rowkwy没有数据类型,总是被认为是byte[],它相当于关系型数据表中的主键。另外Rowkey设计的好坏对读取数据有很长大的关系,可以被认为是设计HBase表是最重要的一个环节。而系型数据表中的行是真正意义上的行,逻辑上和物理上都是按行组织数据。
列族:HBase表中的行是按一个叫colomn family的列族分组的,也是在磁盘上也是按列族存储数据的,由于这个原因,故当定义一个hbase表时,除了定义表名外,还必须定义列族。传统数据库没有列族的概念。
列标识:一个列族中的数据是通过一个叫colomn qualifier的具体描述每一列。列标识在标定一种可以动态定义,既可以在表定义时定义,也可以在保存数据时定义。而系型数据库的表没有此概念。
版本:HBase中的数据有版本的概念,每次生成或修改数据时都保存一个版本信息——这个版本数据就是一个时间戳,可以再定义表时动态设置保存行的版本数量,默认版本数为1,同一行的不同版本的数据是按时间戳倒叙排列的,而其他数据如rowkey和列标识是按字典顺序排列的,这也是读数据操作的一种优化手段。对于某一行,当保存的行的版本数大于设置的值后,最老的版本的数据行就会在执行Major compaction时被删除掉。版本数据是默认添加的,其值时保存数据时的时间戳,long型(长整型)。而系型数据库的表没有此概念。
Cell:在HBase表中,是由rowkey + (colomn family:colomn qualifier) + version来标识一个cell,用户保存的具体数据是保存在这个cell中的,它的值时byte[]类型的,需要在客户端将之改为需要的类型。
table、row、rowkey、colomn family、colomn qualifier、version(timestamp)和cell示意图
对于上图可以看出:
rowkey ->jacky20130429 jacky20130430
comlom family -> info events
version ->t3 t6 t9等
colomn qualifier -> email sex address type name
对于表的2个列族info和events,会被分别保存到磁盘上。
由于【jacky20130429,info,email,t9】 ------> jacky@163.com,故HBase可以被看做是key-value的数据库。另外,HBase也可以被看做有排序的Map的Map:
SortedMap<
Rowkey,List<
SortedMap<
Colomn,List<
value,timestamp
>
>
>
>
第一层的SortedMap代表HBase的HTable,包括一个colomn families的集合,每个列族包括又一层的SortedMap,这层的SortedMap里包括列和相关联的数据的集合。
HBase表中的行是有原子性的,但是一行的不同版本可能分布在不同的storefile文件中,过期失效的数据只能在Major Compaction操作时删除。
深入学习hbase:表,列族,列标识,版本和cell的更多相关文章
- HBase学习——3.HBase表设计
1.建表高级属性 建表过程中常用的shell命令 1.1 BLOOMFILTER 默认是 NONE 是否使用布隆过虑及使用何种方式,布隆过滤可以每列族单独启用 使用HColumnDescriptor. ...
- HBase学习之路 (十)HBase表的设计原则
建表高级属性 下面几个 shell 命令在 hbase 操作中可以起到很大的作用,且主要体现在建表的过程中,看 下面几个 create 属性 1. BLOOMFILTER 默认是 NONE 是否使用布 ...
- HBase(九)HBase表以及Rowkey的设计
一 命名空间 1 命名空间的结构 1) Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定, 则在 default 默认的命名空间中. 2) RegionServer g ...
- 大数据学习——Hbase
1. Hbase基础 1.1 hbase数据库介绍 1.简介 hbase是bigtable的开源java版本.是建立在hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写nosql的数据库系统 ...
- 一种HBase表数据迁移方法的优化
1.背景调研: 目前存在的hbase数据迁移主要分如下几类: 根据上图,可以看出: 其实主要分为两种方式:(1)hadoop层:因为hbase底层是基于hdfs存储的,所以可以通过把hdfs上的数据拷 ...
- hbase源码系列(四)数据模型-表定义和列族定义的具体含义
hbase是一个KeyValue型的数据库,在<hbase实战>描述它的逻辑模型[行键,列族,列限定符,时间版本],物理模型是基于列族的.但实际情况是啥?还是上点代码吧. HTableDe ...
- HBase最佳实践-列族设计优化
本文转自hbase.收藏学习下. 随着大数据的越来越普及,HBase也变得越来越流行.会用HBase现在已经变的并不困难,然而,怎么把它用的更好却并不简单.那怎么定义'用的好'呢?很简单,在保证系统稳 ...
- 数据源、数据集、同步任务、数据仓库、元数据、数据目录、主题、来源系统、标签、增量识别字段、修改同步、ES索引、HBase列族、元数据同步、
数据源.数据集.同步任务.数据仓库.元数据.数据目录.主题.来源系统.标签. 增量识别字段.修改同步.ES索引.HBase列族.元数据同步.DS.ODS.DW.DM.zk集群地址 == 数据源 数据源 ...
- HBase中Memstore存在的意义以及多列族引起的问题和设计
Memstore存在的意义 HBase在WAL机制开启的情况下,不考虑块缓存,数据日志会先写入HLog,然后进入Memstore,最后持久化到HFile中.HFile是存储在hdfs上的,WAL预写日 ...
随机推荐
- Javascript的对象分类
返回索引 按W3CSchool分类 1.JS内置对象 在W3CShool中对应JavaScript对象 参考
- SQL server 提取字符中第一次和最后一次出现的数字
CREATE FUNCTION [dbo].[StringExtractNumber(FirstOrLast)](@address nvarchar(max),@firstOrLast INT) re ...
- Github加载慢,显示不完整问题解决
问题: 在访问Github网站的时候,可能会遇到网站响应超时,图片加载不出,排版错误等情况(大部分情况下是可以正常打开的). 解决方法: 修改 C:\Windows\System32\drivers\ ...
- Educational Codeforces Round 61 (Rated for Div. 2)D(二分,模拟,思维)
#include<bits/stdc++.h>using namespace std;typedef long long ll;int n,k;ll a[200007],b[200007] ...
- 【bzoj3209】: 花神的数论题 数论-DP
[bzoj3209]: 花神的数论题 首先二进制数中1的个数最多就是64个 设所有<=n的数里二进制中1的个数为i的有a[i]个 那么答案就是 然后快速幂 求a[i]可以用DP 设在二进制中从 ...
- phaser小游戏框架学习(一)
这两天由于项目的需要,所以简单学了一下phaser框架. 官网:http://phaser.io/ 还有一个phaser小站,是中文的网站,但是内容不如英文文档全,大家也可以去看这个网站,需要查阅AP ...
- Hadoop源码分析之产生InputSplit文件过程
用户提交 MapReduce 作业后,JobClient 会调用 InputFormat 的 getSplit方法 生成 InputSplit 的信息. 一个 MapReduce 任务 ...
- Jenkins 相关
手动下载Jenkins plugin 的地址, 下载后的是zip 文件,然后再手动修改为.hpi 文件,然后再手动上传 https://plugins.jenkins.io/
- Install AntContrib
link: http://www.neiland.net/blog/article/how-to-install-ant-contrib/ Step 1: Get ANT-Contrib And In ...
- python 批量修改包名
#coding=utf-8 import os #import re # 设置编码为utf-8 否则会报错..这时候 sublime控制台会报乱码.但是别担心,utf-8 文件 并不会报错 impor ...