NoSQL与Apache HBase基础
一、NoSQL概念:
NoSQL(not only SQL)即非关系型数据库。NoSQL具有以下几个特点:
- 不遵循传统RDBMS(Relational Database Management System,关系型数据库)模型。
- 数据是非关系的,且不使用SQL作为主要查询语言。
- 解决了数据库的可伸缩性和可用性问题。
- 不针对原子性或一致性问题。
传统关系型数据库存在的瓶颈:
- 高并发读写
- 高存储量
- 高可用性
- 高扩展性
- 降低成本
NOSQL与关系型数据库的差异:
NoSQL | 关系型数据库 | |
---|---|---|
常用数据库 | HBase、MongoDB、Redis | Oracle、MySQL |
存储格式 | 文档、键值对、图结构 | 表格式,行和列 |
存储规范 | 鼓励冗余 | 规范性,避免重复 |
存储扩展 | 横向扩展,分布式 | 纵向扩展(横向扩展有限) |
查询方式 | 结构化查询语言SQL | 非结构化查询 |
事务 | 不支持事务一致性 | 支持事务 |
性能 | 读写性能高 | 读写性能差 |
成本 | 简单易部署,开源,成本低 | 成本高 |
1. 三大基石:
CAP、BASE和最终一致性。
a.CAP
数据库最多支持Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性)中的两个。
其中HBase支持最终一致性和分区容错性。
b.BASE
- Basically Availble(基本可用):保证核心可用。
- Soft-state(软状态):状态可以有一段时间不同步。
- Eventual Consistency(最终一致性):系统经过一定时间后,数据最终能够达到一致的状态。
c.最终一致性
最终结果保持一致性,而不是实时一致。
2.索引和查询:
a.索引:
- 大多数NoSQL是按key进行索引。
- 部分NoSQL允许二级索引。
- HBase使用HDFS,append-only
i.批处理写入Logged。
ii.重新创建并排序文件。
b.Query(查询):
- 没有专门的查询语言,通常使用脚本语言查询。
- 有些开始支持SQL查询。
- 有些可以使用MapReduce代码查询。
3.MapReduce、Sharding:
a.MapReduce:
- 可进行数据的处理查询。
- 与Hadoop的MapReduce不同但是概念相关。
b.Sharding(分片): - 一种分区模式。
- 可以复制分片用于灾难恢复。
4.NoSQL分类:
分类 | 常见数据库 | 典型应用场景 |
---|---|---|
键值存储数据库 (key-value) | Redis, MemcacheDB, Voldemort | 内容缓存等 |
列存储数据库 (WIDE COLUMN STORE) | Cassandra, HBase | 应对分布式存储的海量数据 |
文档型数据库 (DOCUMENT STORE) | CouchDB, MongoDB | Web应用 |
图数据库 (GRAPH DB) | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等,专注于构建关系图谱 |
二、HBase概念:
HBase是一个面向列存储的数据库,是一个分布式的hash map,它基于Google Big Table论文构建,使用HDFS作为存储并利用其可靠性。
HBase特点:
- 数据访问速度快,响应时间约2-20毫秒。
- 支持随机读写,每个节点20k~100k+ ops/s。
- 可扩展性好,可扩展到20,000+节点。
HBase主要应用场景:
- 增量数据-时间序列数据:高容量,高速写入。
- 信息交换-消息传递:高容量,高速读写。
- 内容服务-Web后端应用程序:高容量,高速读写。
HBase物理架构:Master/Slave架构
a.HMaster的作用:
- 是HBase集群的主节点,可以配置多个,用来实现HA(高可用性)。
- 管理和分配Region。
- 负责RegionServer的负载均衡。
- 发现失效的RegionServer并重新分配其上的Region。
b.RegionServer负责管理维护Region:
- 一个RegionServer包含一个WAL、一个BlockCache (读缓存)和多个Region。
- 一个Region包含多个存储区,每个存储区对应一个列族。
- 一个存储区由多个StoreFile和MemStore组成。
- 一个StoreFile对应于一个HFile和一个列族。
- HFile和WAL作为序列文件保存在HDFS上。
- Client与RegionServer交互。
HBase逻辑架构 - Row
- Rowkey(行键)是唯一的并已排序。
- Schema可以定义何时插入记录。
- 每个Row都可以定义自己的列,即使其他Row不使用,相关列定义为列族。
- 使用唯一时间戳维护多个Row版本,在不同版本中值类型可以不同。
- HBase数据全部以字节存储。
HBase数据管理
a.数据管理目录:
- 系统目录表hbase:meta(存储元数据)。
- HDFS目录中的文件。
- Servers上的region实例。
HBase架构特点:
a.强一致性
b.自动扩展
- 当Region变大会自动分割。
- 使用HDFS扩展数据并管理空间。
c.使用WAL(Write Ahead Log)进行写恢复
d.与Hadoop集成。