大数据时代的数据量是超大规模的,传统的关系数据库已经很难存储和管理这些数据了,为了存储海量数据,我们有了HDFS,它可以把成千上万台服务器上的硬盘聚集成一块超级大的硬盘,为了让这些数据产生价值,我们有了mapreduce,它可以计算这个超大硬盘的数据,面对这么大的数据量我们还有一个迫切的需求那就是如何快速检索出我们想要的数据,而这个功能就是由hbase来承担。

  那么如此海量数据快速检索技术原理又是怎样的呢?我觉得原理很简单就是索引技术。Hbase通过rowkey来区别不同类型数据,通过列族把经常需要一起被查询出来的数据放在一起,例如我们如果要做一个电商平台的交易记录业务表设计,对于电商平台下的商户他其实只需要查询出自己的交易信息,而不会去关心其他商户的交易信息,那么我们就可以把商户号作为rowkey,每一个商户的交易的信息我们就放在一个列族里,商户号这样的信息就像数据在硬盘上的门牌号,我们一传入这个值做查询,hbase就能快速找到数据存储的位置,这就是hbase能快速检索到数据的原理。

  上面讲到的原理只是业务抽象的角度来说,在hbase底层它就是根据上面说到的这些原理来设计的,hbase里面有region的概念,region是一个数据集合,那么什么样的数据会放置到某一个region里呢?hbase是根据rowkey来把同一类的数据放置在一个region里,rowkey下面就是列族,列族对应的底层存储就是hfile,hfile放置在rowkey对应的region下,所以当我们查询时候我们很容易通过业务规则找到我们设计好的rowkey,找到了rowkey就找到region,那么region下存储的hfile列族信息也就可以全部查询出来了。

  Rowkey其实就是hbase的索引,也可以说是hbase官方给出的唯一索引,因此很多资料里说hbase只有一级索引,这个一级索引就指的就是rowkey,因此如何设计rowkey就是一门大学问了,时常我们一行数据不能满足我们复杂的查询要求,我们需要跨行就像scan那么扫描多行数据,而region里的行都是按照一定顺序排列的,这个顺序就是字典顺序,这个我在以前一篇文章里提到过,所以碰到这种情况,我们一般会通过md5将key散列,这样相邻的数据行会排列在一起,底层存储数据时候也会存储在同一个地方(相同region)或者是相互靠近的地方(相邻region),这样也就可以提升查询的效率。

  Hbase内部有两张表一个是-ROOT-表和.META.表,客户端程序就是像我上面给出的示例程序首先访问zookeeper,通过zookeeper获取含有-ROOT-的region服务器名,通过-ROOT-的region服务器可以查询到.META.表里行键rowkey对应的region位置,而-ROOT-和.META.客户端访问后就会缓存起来。

  其实hbase的表设计本身非常简单,对外接口也没有关系数据库那么丰富,我最近学习hbase,觉得hbase基本都没有关系数据库里那些计算函数,可见hbase只是提供一种能快速检索海量数据的一种计算模型而已。

Hbase随笔的更多相关文章

  1. Hbase随笔2

    Hbase是建立在HDFS上的分布式数据库,下图是Hbase表的模型: Hbase这个数据库其实和传统关系数据库还是有很多类似之处,而不是像mongodb,memcached以及redis完全脱离了表 ...

  2. 安装配置和使用HBASE Cluster(基于发行版CDH5.0.2)——系列随笔

    本系列文章只是记录了笔者本人在学习实验安装和使用基于CDH5.0.2的HBASE集群过程中的一些经验教训和心得,绝不是详细的安装过程,因本人不过一初学者,很多方面不甚了了,如果能让不幸读到的人有所得则 ...

  3. HBase中批量修改

    先随便写写..做个随笔记录 使用Rest连接操作Hbase.. 是微软提供的  Microsoft.Hbase.Client 类库.. 版本是0.4.1.0 一直知道   client.StoreCe ...

  4. 相同版本的CDH集群间迁移hdfs以及hbase

    前言 由于项目数据安全的需要,这段时间看了下hadoop的distcp的命令使用,不断的纠结的问度娘,度娘告诉我的结果也让我很纠结,都是抄来抄去, 还好在牺牲大量的时间的基础上还终于搞出来了,顺便写这 ...

  5. Hbase笔记——RowKey设计

    一).什么情况下使用Hbase 1)传统数据库无法承载高速插入.大量读取. 2)Hbase适合海量,但同时也是简单的操作. 3)成熟的数据分析主题,查询模式确立不轻易改变. 二).现实场景 1.电商浏 ...

  6. RDMA调研报告&一点随笔

    计算所科研实践随笔 被淹没在论文海里的两个星期. 早上7:10分起床,草草洗漱,7:30出发,开始漫长的1小时通勤.从地铁站的安检口起,队便排的极长,让人看得头皮发麻.下到了轨道旁稍好,但每趟呼啸而来 ...

  7. HBASE 优化之REGIONSERVER

    HBASE 优化之REGIONSERVER 一,概述 本人在使用优化regionserver的过程有些心得,借此随笔的机会,向大家介绍我的心得,有些是网上拿来的有些是自己在使用过程自己的经验,希望对大 ...

  8. 大数据入门第十五天——HBase整合:云笔记项目

    一.功能简述 1.笔记本管理(增删改) 2.笔记管理 3.共享笔记查询功能 4.回收站 效果预览: 二.库表设计 1.设计理念 将云笔记信息分别存储在redis和hbase中. redis(缓存):存 ...

  9. 大数据入门第十四天——Hbase详解(一)入门与安装配置

    一.概述 1.什么是Hbase 根据官网:https://hbase.apache.org/ Apache HBase™ is the Hadoop database, a distributed, ...

随机推荐

  1. java验证码刷新

    可以使用a标签,这样省事 <img id="code_img" src="validcode" alt="登录验证码" /> & ...

  2. Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试

    本文是本人前一段时间做一个简单Java监控工具调研总结,主要包括VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,以及对Java微基准测试的简单介绍, ...

  3. qt中添加Q_OBJECT报错的问题

    在qt编写的过程中添加Q_OBJECT后发现老是报错的问题 编译后老是报undefined reference to vtable for "xxx"的错误,后来发现在xxx.pr ...

  4. pycharm5新版注册

    ##注册方法1### 0x1 ,安装 0x2 , 调整时间到2038年. 0x3 ,申请30天试用 0x4, 退出pycharm 0x5, 时间调整回来. ##注册方法2### 注册方法: 在 注册时 ...

  5. dos2unix unix2dos

    实现windows和linux之间的文件自动转换,消除^M.

  6. 脉冲计数功能在ESM335x-Linux主板上的实现

    1.综述 在工业控制中,经常需要获取脉冲信号计数值.频率.周期.占空比等参数.英创嵌入式主板ESM335X系列 Linux系统现已实现外部输入脉冲信号的计数.频率.周期.占空比测量功能. 主要功能及技 ...

  7. Thinkphp去掉index.php

    1.httpd.conf配置文件中 #LoadModule rewrite_module modules/mod_rewrite.so 把前面的警号去掉2.AllowOverride None 将No ...

  8. 一条SMS最大字符数,字符数达到多少按MMS处理

    1,一条SMS最大字符数 ----------------------------------------- android\frameworks\opt\telephony中 com.android ...

  9. js获取单选按钮的值

    function a(){ var v=document.getElementsByName("radio"); ;i<v.length;i++){ if(v[i].chec ...

  10. Javascript重要知识点梳理

    Javascript重要知识点梳理 一.Javascript流程控制 js中常用的数据类型 var关键字的使用 if – else if – else switch while for 二.Javas ...