最近做项目接触到了HDFS、mapreduce以及Hbase,有了实战机会,今天打算将这些知识好好总结下,以备不时之需。首先从Hbase开始吧。

  Hbase是建立在HDFS上的分布式数据库,下图是Hbase表的模型:

Hbase这个数据库其实和传统关系数据库还是有很多类似之处,而不是像mongodb,memcached以及redis完全脱离了表的概念,只不过hbase是以列为中心的数据库,而传统关系数据库则是以行为中心的数据库。不过hbase这个列并非我们传统意义的列,而是列族。列族是hbase最小的存储单位,换句话说hbase底层数据都是以列族来进行组织的。

学习hbase我最大的收获我个人觉得是对数据库的一种新的认识,数据库作用还是快速的检索出我们想要数据,也就是数据库的主要作用还是为了实时查询,如果一个存储数据的系统检索数据的速度很慢,那么这个系统应该称之为数据仓库,hbase是一种数据库,是一种用来弥补传统关系数据库在海量数据中快速检索数据的能力不足。不过受制于持久存储系统的检索数据的速度以及海量数据存储是分散到各个服务器上,因此解决海量数据实时检索的方式只有根据实际的业务场景重新组织数据存储的模型,并且加上合理的索引来解决的。那么hbase是如何解决这个问题的呢?

Hbase首先打破关系数据库里的避免数据冗余的机制,将经常需要一起查询的记录聚集在一起存储,例如商户的订单信息,这里我们用order代表订单信息,orderId为订单号,spId为商品订单号,spNm为商品名字,num为数量其他字段就略去,在hbase里我们可以把order定义为一个列族,orderId这些字段就是列的名字,在底层存储系统里我们将order这个列族下所有的列数据聚集在一起存储,那么当我们查询订单信息就可以直接找到这些聚集在一起的存储订单信息,那么就可以快速查询出订单信息。这一点相比关系数据库,关系数据库很难将一些经常查询出来的信息聚集在一起存储,这也就是hbase对于关系数据库的一大优势。这也就是为什么hbase是围绕列族的数据库,因为列族就是将一些经常会被一起查询出来的数据的逻辑抽象,所以底层物理存储机制都是围绕列族进行,这也就是hbase里的hfile了,hfile是hbase物理存储的最小单位,而hfile都是按照列族聚集在一起的。

前面我说道想要在海量数据下做到实时查询数据,一个要解决的问题就是如何将经常查询的数据聚集在一起存储,另一个就是建立索引了,下面我就要讲讲hbase的索引是如何设计。Hbase的索引是靠rowkey完成,也就是行主键,还是以商户订单为例,我们通过设计列族将这些数据聚集在一起存储,但是实际查询里我们经常会根据不同商户,或者不同商品查询订单信息,那么我们就得要有手段能快速从聚集的订单信息里查询出所需要查询的订单信息,那么这时候就靠rowkey的作用了,在hbase物理存储里最小存储单位是hfile,hfile之上则是region,每个region里聚集很多hfile(当然实际hbase底层存储比这个复杂,还有memstore,这是根据LSM存储原理设计,不过本文就以hfile代表整个列族存储),而region则是根据rowkey来进行构建和拆分的,换个说法就是region的名字或者代号就是rowkey,现在我们回到订单的例子,我们可以在rowkey的设计时候加入商户号,当用户查询时候可以根据商户号快速定位到region,然后再在region里进一步查找具体的列族信息,这样就完成了一个快速检索数据的目的。

最近学习hbase一直有个问题困惑我,那就是为何hbase的rowkey要按照字典顺序设计,而不是按顺序设计,这个疑惑的源头是很多hbase资料里说hbase是一个有利于顺序查询的数据库,那么rowkey设计为顺序格式不是更好吗?

对于这个问题我其实还没完全理解清楚,不过字典顺序也是一种顺序,在字典顺序之上还是可以很好设计出按照数字顺序的rowkey,不过hbase的rowkey是有别于关系数据库的主键,关系数据库下,一个行的主键只能查询出一条数据,而hbase一个rowkey能查询出许多数据,因此对于实时查询而言rowkey的数字顺序相比关系数据库的行意义小的多。这两个原因有点不痛不痒了,下面原因是个很重要的原因了,hbase里的region是hbase对客户端提供相关操作的单位,而rowkey是按照数字顺序排序,那么region则会根据顺序进行拆分,如果这个rowkey包含了时间因素,那么当大量客户端只做最近时间查询,就会导致时间最近那个region负载压力很大,为了达到负载均衡能力,我们最好将客户端的查询分布在各个不同的region上,那么我们最好让不同的region存储的数据应对查询是分布均衡的,而这个就是要靠rowkey设计实现的。不管怎么说hbase的使用里hbase的作用很关键。

时间匆忙今天写道这里,希望自己研究完后能好好系统写几篇关系hbase的文章了。

Hbase学习笔记01的更多相关文章

  1. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

  2. HBase学习笔记之HBase的安装和配置

    HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...

  3. HBASE学习笔记(四)

    这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...

  4. C++ GUI Qt4学习笔记01

    C++ GUI Qt4学习笔记01   qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...

  5. SaToken学习笔记-01

    SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...

  6. Redis:学习笔记-01

    Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...

  7. PHP 学习笔记 01

    例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...

  8. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  9. xml基础学习笔记01

    注意:刚刚看了网上对于XML中的标签,节点和元素?到底应该怎么表述?起初我也有这个疑惑,现在我的想法是:下面出现node的应称作节点,节点对象.element应称作元素,毕竟这更符合英文的本意.至于标 ...

随机推荐

  1. Python高手之路【二】python基本数据类型

    一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...

  2. Asp.net Boilerplate源码中NotNullAttribute的用处

    看Asp.net Boilerplate 1.1.3.0源码时发现有一个NotNullAttribute的定义和27处的引用,就是不知道它的作用,当然顾名思义是可以的,就是不知道它是怎么判断的,在哪里 ...

  3. Win10 IIS本地部署网站运行时图片和样式不正常?

    后期会在博客首发更新:http://dnt.dkill.net 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 启用关闭win功 ...

  4. CENTOS 6.5 平台离线安装 Apache2.4

    一.下载Apache 2.4 http://httpd.apache.org/download.cgi http://mirrors.cnnic.cn/apache//httpd/httpd-2.4. ...

  5. python笔记(持续更新)

    1.编译python遇到下面的编码问题:     SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on lin ...

  6. MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决

    一.简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发.发布并支持的.有以下特点: MySQL是一种数据库管理系统. MySQL是一种关联数据库管理系统. MySQ ...

  7. ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results

    原文:Controllers, Actions, and Action Results 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:许登洋(Seay) Action 和 acti ...

  8. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  9. 开始webservice了

    一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...

  10. Jexus服务器SSL二级证书安装指南

    申请获得服务器证书有三张,一张服务器证书,二张中级CA证书.在Android微信中访问Https,如果服务器只有一张CA证书,就无法访问. 获取服务器证书中级CA证书: 为保障服务器证书在客户端的兼容 ...