zoukankan      html  css  js  c++  java
  • HBase-介绍

    1.HBase概述

      1.1 HBase是一个基于HDFS的面向列的分布式数据库,源于Google的BIGTable论文;

      1.2 HBase是Apache Hadoop生态系统中的重要组成部分,主要用于海量结构化数据存储;

      1.3 HBase内部管理的文件全部存储在HDFS中;

    2.NOSQL简介

      NoSQL=Not Only SQL,也就是说不仅仅是SQL,会有一些把NOSQL数据的原生查询语句封装成为SQL,比如HBase就拥有Phoenix工具;

      常见的NOSQL与RDBMS:

        NOSQL:HBase,Redis,MongoDB

        RDBMS:MySQL,Oracle,SQL Server,DB2

      HBase数据库的特点:

        (1)它介于NOSQL与RDBMS之间,仅能通过主键和主键的range来检索数据;

        (2)HBase的查询功能简单,不支持JOIN操作;

        (3)HBase中支持的数据类型,byte[],底层存储数据的结构都是byte[];

        (4)不支持复杂的事务,只支持行级事务(可以通过hive实现多表join的操作);

        (5)主要用来存储结构化和半结构化的松散数据;

      结构化,半结构化和非结构化:

        结构化:数据结构字段含义确定,清晰,典型的如数据库中的表结构;

        半结构化:具有一定结构,但语义不够确定,典型的如HTML网页,有些字段是确定的(title),有些不确定(table);

        非结构化:杂乱无章的额数据,很难按照一个概念去进行抽取,无规律性;

        与hadoop一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力;

    3.HBase中表的特点

      3.1 大,一个表可以有几十亿行,上百万列;

      3.2 面向列,面向列族的存储和权限控制,列簇的独立检索;

      3.3 稀疏,对于为空的列,并不占据存储空间,因此表可以设计的非常稀疏;

      3.4 无模式,每行都有一个可排序的主键和任意多的列,列可以根据需要动态的添加,同一张表不同的行可以使用不同的列;

        

    4.HBase中的名词概念

      HBase中的数据表如下:

        

      4.1 Row Key概念

        Row Key的概念与mysql中的主键概念是一致的,HBase使用Row Key来唯一的标识一行数据;

        由于HBase中仅支持三种查询方式:

          (1)基于Row Key的范围扫描;

          (2)基于Row Key的单行查询;

          (3)全表扫描;

        因此Row Key在HBase中的设计至关重要,对HBase的性能影响很大;

        Row Key的行键可以说任意字符串(最大长度为64KB),在实际的应用中长度一般为(10-100bytes),最好是16;在HBase的内部,Row Key保存为字节数组,HBas会对表中的数据按照Row Key排序(字典排序);

      4.2 Column的概念

        列,可理解为mysql中列的概念;

      4.3 Column Family的概念

        列族,HBase所引入的概念;HBase通过列族划分数据的存储,列族下面可以包含任务多的列,实现数据的灵活存取;就像家族的概念一样,我们知道一个家族搜索由很多家庭构成的;列族也类似,由一个一个的列构成;

        HBase表的创建的时候就必须指定列族;就像关系型数据库创建的时候必须指定具体的列一样的;

        HBase的列族不是越多越好,官方推荐的是列族最好小于或者等于3,;我们使用的场景一般是1个列族;

      4.4 TimeStamp的概念

        TimeStamp对于HBase来说至关重要,因为它是实现HBase多版本的关键;在HBase中使用不同的TimeStamp来标识相同的Row Key行对应不同版本的数据;

        HBase中通过Row Key和columns确定为一个存储单元成为cell,每个cell都保存着同一份数据的多个版本;版本通过时间戳来索引,时间戳的类型是64位整形,时间戳可以有HBase(在数据写入时自动)赋值,此时间戳是精确到毫秒的当前系统时间;时间戳也可以有客户显示赋值;如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳;每个cell中,不同版本的数据按照倒序排序,即最新的数据排再最前面;

        为了避免数据存在过多版本造成的管理(包括存储和索引)负担,HBase提供了两种数据版本回收方式:

          保存数据的最后n个版本;

          保存最近一段时间内的版本(设置数据的生命周期TTL);

        用户可以正对每个列簇进行设置;

  • 相关阅读:
    ConCurrent并发包
    volitale最经典理解
    java中关于volatile的理解疑问?
    一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下(转)
    架构师成长之路
    rocketmq,zookeeper,redis分别持久化的方式
    rocketmq持久化方式
    源码主干分支开发四大模式
    HDU 4876 ZCC loves cards(暴力剪枝)
    webView用法小结
  • 原文地址:https://www.cnblogs.com/wnwn/p/12794339.html
Copyright © 2011-2022 走看看