一、基本概念
关于hbase它是来自于谷歌的论文bigtable衍生出来的,Google论文:BigTable。
HBase是一个构建在HDFS上的分布式列存储系统;
HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;
从逻辑上讲,HBase将数据按照表、行和列进行存储。
实际存储样式
但用户的逻辑视图下面的样子
二、nosql和关系型数据库
nosql型数据库,not only sql(不仅仅是数据库),常见的有:
mongodb,语言C++,基于文档存储,类似于json格式的格式存储;
hbase:apache开源的分布式数据库,也是hadoop生态圈的部分,存储量非常大,底层也是依赖于hdfs;
redis:基于内存,key-value形式,通过key快速得到value的值。
相对应的主流关系型数据库:
Oracle:针对于商业版,收费,端口号1521
MySQL :针对于社区版,免费,中小型企业居多,端口号3306
sql server:端口号1433 (目前还不能安装在linux中,不过慢慢的在靠拢)。
三、为什么要用HBase,而不直接用HDFS呢?
1.hdfs是分布式的文件系统,存储大量数据;hbase是数据库,构建与hdfs之上
2.hdfs不支持快速单个记录查找;hbase支持大表的快速查找
3.hdfs提供了高延迟批处理;hbase提供了单行记录低延迟随机访问
4.hdfs只提供数据按序访问;hbase内部是使用hash表提供的随机访问,在hdfs上存放索引文件,用于快速查找
四、Hbase表的特点
大:一个表可以有数十亿行,上百万列;
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的
列;面向列:面向列(族)的存储和权限控制,列(族)独立检索;
稀疏:对于空(null)的列,并不占用存储空间,表可以设计的非常稀疏;
举例:
学生信息表(RDBMS)
存数据的时候一般先给学号(ID),再给其它信息,如果这列没有值,就是NULL,也是占用空间的。
数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
数据类型单一:Hbase中的数据都是字符串,没有类型。
进一步理解:
hbase是面向列簇的数据库,所谓的列簇就是指一组列,适用于海量数据的随机读写
table中只定义了列簇,一个表可以包含多个列簇,列簇中的列可增可减,表按照行(row)存储
没有数据库的概念,有个namespace空间,所有的表都是依赖于一个namespace下的,类似database的概念
行键:没有主键,rowkey,类似主键的概念,唯一标识一行
列簇:column family在每个列簇中包含不同的字段,将相同属性的列划分一个组,建表的时候必须要指明一个列簇,可以不给字段
列:column在列簇里的字段
版本:version,【不是hbase版本】表示是单元格或者单元格组,默认显示最新的version
五、行存储与列存储
传统行式数据库
(1)、数据是按行存储的
(2)、没有索引的查询使用大量I/O
(3)、建立索引和物化视图需要花费大量时间和资源
(4)、面向查询的需求,数据库必须被大量膨胀才能满足性能要求
列式数据库
(1)、数据是按列存储-每一列单独存放
(2)、数据即是索引
(3)、只访问查询涉及的列-大量降低系统I/O
(4)、每一列由一个线索来处理-查询的并发处理
(5)、数据类型一致,数据特征相似-高效压缩
六、数据模型
网上有一些图,可以用来理解
Rowkey与Column Family
Version和Value
(1)HBase schema可以有多个 Table
(2)每个表可由多个Column Family组成
(3)HBase 可以有 Dynamic Column
列名称是编码在cell中的,不同的cell可以拥有不同的列
(1)version number 可由用户提供
无需以递增的顺序插入,每一行的rowkey必须是唯一的
(2)Table 可能非常稀疏
很多 cell 可以是空的
(3)Row Key是主键
七、Hbase支持的操作
(1)所有操作均是基于rowkey的;
支持CRUD(Create、Read、Update和Delete)和Scan;
(2)单行操作
Put
Get
Scan
(3)多行操作
Scan
MultiPut
(4)没有内置join操作,可使用MapReduce解决。
八、Hbase物理模型
(1)每个column family存储在HDFS上的一个单独文件中;
(2)Key 和 Version number在每个 column family中均由一份;
(3)空值不会被保存。
好了,这篇文章的内容营销圈就和大家分享到这里,如果大家对网络推广引流和网络创业项目感兴趣,可以添加微信:Sum8338 备注:营销圈引流学习,我拉你进直播课程学习群,每周135晚上都是有实战的推广引流技术和网络创业项目课程分享,当然是免费学!