HBase初步了解
什么实HBase
HBase 是分布式非结构化面向列的开源数据库。数据文件都存储在Hadoop HDFS文件系统上,所以HBase必须要在Hadoop的环境下使用。仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务
HBase 用途
主要用来存储非结构化和半结构化的松散数据。存数据是分区存储,自动分区。
使用场景
- 系统需要适应不同种类的数据格式和数据源,不能预先严格定义模式,需要处理大规模数据
- 不强调数据之间的关系,所要存储的数据是半结构化或非结构化的;
- 数据非常稀疏;
- 想要更好的进行扩展;
表结构
一张表由多行组成,每一行由多个列组成,这些列可以使单个的列也可以是列族(column family),列族有多个列组成的,一个列族所有的列都存放在相同的存储文件中(HFile二进制格式文件)。注意每行列族控制在2-3个,因为刷新某一个列族的时候会同时刷新他相邻的列族 每行有一个唯一的行健(rowKey)其长度默认应该小于65536,检索时根据行健检索。
如图所示是一个简单的Hbase表结构,timestamp是时间戳,表示列的版本。
行数据的存取操作是具有原子性的,要么全部成功要么全部失败,可以读取任意数目的列还不支持跨行事务和跨表事务。
疑问
- Hbase表的字段数据类型是什么
HBase只有字符串类型,存入的都字节(byte)类型。 - hbase的创建语句
hbase是通过shell脚本来编写创建语句的。 - 如何查询指定的数据
只能通过行健来查询数据 - 表中的数据是否都是二进制的字节码?
优点
- 列可以动态增加,列为null时不占空间。节省空间。
2.Hbase自动切分数据,使得数据存储自动具有水平scalability.
3.Hbase可以提供高并发读写操作的支持
缺点
不支持条件查询,只能通过row key 来查询。
补充
1.数据操作:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,不可以做连接查询的操作。
2.存储模式:HBase是基于列存储的,每个列族都由几个文件保存,不同的列族的文件是分离的。相同的列族是存放在相同的文件中的。而传统的关系型数据库是基于表格结构和行模式保存的
3.数据维护,HBase的更新操作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改