概述
- HBase原本是由Yahoo公司开发,后来贡献给了Apache的一套基于Hadoop的、分布式的、可扩展的、非关系型数据库
- 如果需要对大量数据进行随机且实时读写,那么可以考虑使用Hbase
- HBase能够管理非常大的表:billions of row * millions columns,十亿行 * 百万列
- Hbase是仿照Google的Big Table来进行实现的。因此,Hbase和BigTable的原理几乎一致,只是实现语言不同。Hbase是使用Java语言实现的,BigTable使用的是C语言实现的。Hbase最终的数据保存在HDFS上。
- Hbase提供了3个大版本,Hbase1、Hbase2为稳定版,Hbase3为测试版,这3个版本都在同时更新。HBase的版本跟JDK和Hadoop都有映射关系,具体看下面的补充
- Hbase作为非关系型数据库,不支持标准的SQL语法,它本身提供了一套全新的命令。
- Hbase允许存储稀疏的数据,也因此HBase能够存储结构化和半结构化的数据。
- Hbase本体作为数据库,提供了完整的增删改查的功能。HBase基于HDFS来进行存储,HDFS的特点是一次写入多次读取,不允许修改但允许追加写入,但是HBase提供了“改”功能,HBase如何实现“改”功能的? ——HBase实际上并没有去修改写入的数据,而是在文件末尾去追加数据。HBase会对写入的每条数据自动添加一个时间戳,当用户获取数据的时候,HBase自动回返回最新的数据,那么从用户的角度来看,就是发生了数据的修改。
- 在HBase中,数据的每一个时间戳称之为一个版本
- 10.如果要锁定唯一的一条数据,那么需要通过行键+列族+列+时间戳这四个维度来锁定,这种结果称之为一个Cell(单元格)
- 11.HBase中的表在创建的时候,如果不指定,那么只对外提供一个版本的数据
- 如果建好表之后再修改
可以获取的版本
,那么已经历史数据会不可用。 - 即使表允许对外获取多个版本的数据,在获取的时候如果不指定获取的版本数量,依然只获取一个版本的数据
补充:实时读写很容易理解,那么什么是随机读写呢?
首先要理解随机读写,要引入几个概念:随机读、随机写、顺序读、顺序写
比如读一篇文章,我们都是从头到尾读下去的,这个叫顺序读
如果我们写一篇文章,我们也是从头到尾,从文章的尾部不断追加内容的,这个叫顺序写
如果一篇文章很长,我们要的内容在其中的某一页,那我们直接翻开那一页去读,这个叫随机读
如果我们可以在文章中间部分随意插入一些文字,那么这个叫随机写
随机读和随机写仔细琢磨,其实是分成两步
第一步先定位要读取或写入的位置
第二步在执行读取或写入的操作
类比sql操作
顺序读:select * from table
随机读:select * from table where name = ‘xxx’
顺序写:insert table values xxx
随机写:update table set xxx=xxx
补充
Hbase和jdk版本的对应关系
https://hbase.apache.org/book.html#basic.prerequisites
Hbase和hadoop的对应关系
https://hbase.apache.org/book.html#hadoop
基本概念
- RowKey:行键
在Hbase中,没有主键的概念,取而代之的是行键
不同于传统的关系型数据库,在Hbase中,定义表的时候不需要指定RowKey,而是在添加数据的时候手动添加RowKey - column Family:列族
在Hbase中,没有表关联的概念,取而代之的是用列族来进行设计。
在Hbase中,一个表至少要包含一个列族,可以包含多个列族,理论上不限制列族的数量。
在Hbase中,在定义表的时候必须要定义列族,但是列可以动态增删。一个列族中可以包含0到多个列。 - namespace:名称空间
在HBase中没有database的概念,取而代之的是namespace
在HBase启动的时候,自带了两个空间:default和hbase。hbase空间下放的是HBase的基本信息;在建表的时候如果不指定,则表默认是放在default空间下。