Hbase的概述
hbase定义:
一种分布式,可扩展,支持海量数据存储的NoSql数据库
存储海量数据,对海量数据操作时会有明显优势,但对小数据操作时,考虑到本身的资源消耗可能不是那么的快。
官网定义:
Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储。
当您需要对大数据进行随机,实时读/写访问时,请使用Apache HBase™。该项目的目标是托管非常大的表 - 数十亿行X百万列 - 在商品硬件集群上。Apache HBase是一个开源的,分布式的,版本化的非关系数据库,模仿Google的Bigtable: Chang等人的结构化数据分布式存储系统。正如Bigtable利用Google文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS之上提供类似Bigtable的功能。
逻辑存储
逻辑上hbase的数据模型桶关系型数据模型很类似,数据存储在一张表中,有行有列。但从hbase的底层物理存储结构k-v来看,hbase更像一个multi-dimensional map多维的map
列:name,city,phone,tel,address
列族:将几个列和并在一起,称为一个列族,一个列族也标志着这张大表的小表存在一个不同的文件中
rowkey:hbase中自带的系统默认必须制定的,相当于mysql中的主键,必须是唯一的,当他不唯一时就会被后面加入的值覆盖。
region:切片,相当于mysql的高表切片成不同的小表,和列族一起切割,将一个 大表切割成不同的小表存放在不同的文件中。
store:切分完后的一张小表中的数据,就是实际存储的数据,这个数据是实际存在hdfs上的。
这些列名什么相当于元数据,是不必都要存储的,实际可以存储在服务的内存中,调用数据的时候可以根据映射找到实际的值
物理存储:
这里将一条数据中的值拿出来分析,它的具体存储其实存储的是这些信息。
rowkey 类似主键, column family列族 column Qualifier 列明
timestamp:时间戳 type:操作的类型 value:实际的值
这里的rowkey,列族,列名,时间戳可以唯一表示出一条数据的信息
这里的时间戳在hbase中是很重要的:当对数据信息进行 操作时会默认读取当前时间戳最大的那条数据,这就要求window和linux的时间是完全同步的。当它不同步时,通过api在window下操作数据,如插入删除时会可能window的时间戳没linux的大,会导致它的操作成功,但是它读取时按照最大的那个时间戳来就读取不出来。
间戳没linux的大,会导致它的操作成功,但是它读取时按照最大的那个时间戳来就读取不出来。
当删除一条数据时,type会将那个put标记为del当读取时就会默认不去读取,去寻找除了这个信息外时间戳最大的哪条数据。但此时去看表时可能那条数据还会存在,但是会被默认跳过读取,它的删除也是内部机制实现删除的,但不会实时马上删除,但用户读取时可以说实现了删除功能,因为会自动忽略。