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的更多相关文章

  1. HBase学习——3.HBase表设计

    1.建表高级属性 建表过程中常用的shell命令 1.1 BLOOMFILTER 默认是 NONE 是否使用布隆过虑及使用何种方式,布隆过滤可以每列族单独启用 使用HColumnDescriptor. ...

  2. HBase学习之路 (十)HBase表的设计原则

    建表高级属性 下面几个 shell 命令在 hbase 操作中可以起到很大的作用,且主要体现在建表的过程中,看 下面几个 create 属性 1. BLOOMFILTER 默认是 NONE 是否使用布 ...

  3. HBase(九)HBase表以及Rowkey的设计

    一 命名空间 1 命名空间的结构 1) Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定, 则在 default 默认的命名空间中. 2) RegionServer g ...

  4. 大数据学习——Hbase

    1. Hbase基础 1.1 hbase数据库介绍 1.简介 hbase是bigtable的开源java版本.是建立在hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写nosql的数据库系统 ...

  5. 一种HBase表数据迁移方法的优化

    1.背景调研: 目前存在的hbase数据迁移主要分如下几类: 根据上图,可以看出: 其实主要分为两种方式:(1)hadoop层:因为hbase底层是基于hdfs存储的,所以可以通过把hdfs上的数据拷 ...

  6. hbase源码系列(四)数据模型-表定义和列族定义的具体含义

    hbase是一个KeyValue型的数据库,在<hbase实战>描述它的逻辑模型[行键,列族,列限定符,时间版本],物理模型是基于列族的.但实际情况是啥?还是上点代码吧. HTableDe ...

  7. HBase最佳实践-列族设计优化

    本文转自hbase.收藏学习下. 随着大数据的越来越普及,HBase也变得越来越流行.会用HBase现在已经变的并不困难,然而,怎么把它用的更好却并不简单.那怎么定义'用的好'呢?很简单,在保证系统稳 ...

  8. 数据源、数据集、同步任务、数据仓库、元数据、数据目录、主题、来源系统、标签、增量识别字段、修改同步、ES索引、HBase列族、元数据同步、

    数据源.数据集.同步任务.数据仓库.元数据.数据目录.主题.来源系统.标签. 增量识别字段.修改同步.ES索引.HBase列族.元数据同步.DS.ODS.DW.DM.zk集群地址 == 数据源 数据源 ...

  9. HBase中Memstore存在的意义以及多列族引起的问题和设计

    Memstore存在的意义 HBase在WAL机制开启的情况下,不考虑块缓存,数据日志会先写入HLog,然后进入Memstore,最后持久化到HFile中.HFile是存储在hdfs上的,WAL预写日 ...

随机推荐

  1. linux 进程间通信机制(IPC机制)一总览

    1.作用:进程间通信机制(Inter Process Communication,IPC),这些IPC机制的存在使UNIX在进程通信领域手段相当丰富,也使得程序员在开发一个由多个进程协作的任务组成的系 ...

  2. 记一次安装kolla遇到DockerException: Error while fetching server API version: Timeout value connect was Timeout的问题

    1)环境信息: docker版本:17.09,当docker的版本是12.06时,也会报这个错误 [root@localhost ~]# docker --version Docker version ...

  3. Pyinstaller打包matplotlib.pyplot画图时提示无法找到Qt插件的解决办法

    This application failed to start because it could not find or load the Qt platform plugin "wind ...

  4. asp web.config文件里compilation的assemblies add的元素来自哪里

    该程序集组合由版本.区域性和公钥标记组成. ASP.NET 首先在应用程序的专用 Bin 目录中搜索程序集 DLL,然后在系统程序集缓存中搜索程序集 DLL. add 元素添加要在动态资源编译期间使用 ...

  5. Pycharm新手教程,只需要看这篇就够了

    pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycharm一共有两个版 ...

  6. P1919 【模板】A*B Problem升级版(FFT快速傅里叶)

    题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. 输出格式: 输出一 ...

  7. tcp设置超时重传

    TCP超时和重传的基础是怎样根据给定连接RTT设置RTO,若TCP先于RTT开始重传,可能会在网络中引入不必要的重复数据,反之,若延迟至远大于RTT的间隔发送重传数据,整体网络利用率会随之下降.由于R ...

  8. P1630 求和

    题意:求$\sum_{i=1}^a i^b,a,b\le 10^9$ 暴力只有30分QAQ(本数学蒟蒻当然想不到正解啦) 正解:模数很小,不难(?)想到$i^a%10000=(i+b)^a %1000 ...

  9. luogu4088 [USACO18FEB]Slingshot

    link 这题在线得写树套树,所以我写的离线+树状数组 对于每个询问,Ans=\(\max_{j=1}^n{|a_j-x_i|+|b_j-y_i|+t_i}\) 拆成四种情况 \(x_i\le a_j ...

  10. [PowerShell] check PowerShell Version

    如果你已经开始在日常的工作中大量使用PowerShell自动化重复工作.建议你使用3.0以上的版本. 可以使用如下命令检测你的PS版本 如需要安装PowerShell,可以参看https://tech ...