HBase
HBase是什么?
hbase是bigtable的开源(源码使用Java编写)版本。是建立在hdfs之上的,被设计用来提供高可靠性、高性能、列存储、可伸缩、多版本的NoSQL的分布式数据存储系统,实现对大型数据的实时、随机读写的读写访问
事务的四大特性
事务主要用于管理insert、update、delete语句。
一般来说,事务必须满足四个条件:原子性、一致性、隔离性、持久性。
- 原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某环节。事务在执行过程中发生错误,会回滚到事务开始前的状态,就像这个事务没有执行过一样。
- 一致性:在事务开始之前、结束之后,数据库的完整性没有被破坏。
- 隔离性:数据库i允许多个并发事务,同时对其数据进行读写和修改的能力。隔离性可以防止多个并发事务执行,由于交叉执行,而导致的数据不一致。事物的隔离分为不同级别,包括读未提交;读提交;可重复读;和串行化。
- 持久性:事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失数据。
HBase的数据库要点
- 高并发,可扩展,解决海量数据集的随机实时增删改查
- HBase 本质依然是 Key-Value 数据库,查询数据功能很简单,不支持 join 等复杂操作(可通过 Hive 支持来实现多表 join 等复杂操作)
- 不支持复杂的事务,只支持行级事务
- HBase 中支持的数据类型:byte[](底层所有数据的存储都是字节数组)
- 主要用来存储结构化和半结构化的松散数据。
数据结构
- 结构化:数据结构字段含义确定,清晰,典型的如数据库中的表结构
- 半结构化:具有一定结构,但语义不够确定,典型的如HTML网页,有些字段是确定的(title),有些不确定(table)
- 非结构化:杂乱无章的数据,很难按照一个概念去进行抽取,无规律性
hbase的特点
- 面向列
hbase是面向列的存储和权限控制,并支持独立索引。列式存储,其数据在表中是按照某列存储的,在查询只需要少数的几个字段时,能够大大的减少读取的数据量。 - 多版本
hbase每一个列的存储有多个Version。 - 稀疏性
为空的列不占用存储空间,表可以设计的非常稀疏。 - 大
一个表可以有数十亿行,上百万列。 - 数据类型单一
hbase中的数据都是字符串,没有类型