这是我参与「第四届青训营 」笔记创作活动的第10天
深入浅出 HBase 实战
关系型数据库的查询瓶颈
当用户表的数据达到几千万甚至几亿级别的时候,对单条数据的检索将花费数秒甚至达到分钟级别。
高并发的更新(插入、修改、删除)操作。大中型网站的并发操作一般能达到几十乃至几百并发,此时单条数据查询的延时将轻而易举地达到分钟级别
CAP定理 分摊读写压力的有效方式是将单个关系型数据库扩展为分布式数据库。但是,随之而来的问题则是很难保证原子性。没有了原子性,事务也无从谈起,关系型数据库也就没有了存在的意义,为了保证原子性,则需要增加很多额外的必要操作,此时一次写操作的性能却面临大幅下降。
Consistency(强一致性):数据更新操作的一致性,所有数据变动都是同步的。 Availability(高可用性):良好的响应性能。 Partition tolerance(高分区容错性):可靠性。 任何分布式系统只可同时满足二点,没法三者兼顾。
HBase概念
HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。
HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)提供的容错能力。
它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。
人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。
HBase 是存储计算分离架构,以 HDFS 作为分布式存储底座。数据实际存储在 HDFS。
HBase 写流程:
- 数据先写入 WAL 持久化,用于宕机时恢复内存里丢失的数据;
- 再写入内存态 MemStore,以一种跳表(SkipList)数据结构提供有序的数据和高效的随机读写;
- 当满足特定条件时(比如内存中数据过多,或间隔时间过长),MemStore 数据以 HFile 格式写入 HDFS
HBase的存储机制
HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:
- 表是行的集合。
- 行是列族的集合。
- 列族是列的集合。
- 列是键值对的集合