关系型数据库基本概念
关系型数据库简介
- 关系型数据库的功能及特点
–基于事务的ACID机制,数据强一致性
–参照完整性
–采用标准的SQL进行数据操作
–适合事务性操作
–物理结构基于行进行存储 - 关系型数据库存在的问题
-–数据量急剧增长会导致数据库变慢
–索引带来的额外负载
–不适合超大规模的数据分析操作 - 解决方案
–读写分离
–增加缓存,如memcached
–数据分区
数据结构介绍
结构化数据
结构化数据具有固定的结构,属性划分,以及类型等信息。我们通常所理解的关系型数据库中所存储的数据信息,大多是结构化数据, 如职工信息表,拥有ID、Name、Phone、Address等属性信息。
结构化数据通常直接存放在数据库表中。数据记录的每一个属性对应数据表的一个字段。
非结构化数据
无法用统一的结构来表示。如文本文件、图像、视频、声音、网页等信息。
数据记录较小时(如KB级别),可考虑直接存放到数据库表中(整条记录映射到某一个列中),这样也有利于整条记录的快速检索。
数据较大时,通常考虑直接存放在文件系统中。数据库可用来存放相关数据的索引信息。
半结构化数据
具有一定的结构,但又有一定的灵活可变性。典型如XML、HTML等数据。其实也是非结构化数据的一种。可以考虑直接转换成结构化数据进行存储。
根据数据记录的大小和特点,选择合适的存储方式。这一点与非结构化数据的存储类似。
存储方式介绍
按行存储
按行存储:数据按行存储在底层文件系统中。通常,每一行会被分配固定的空间。
优点:
- 有利于增加/修改整行记录等操作;
- 有利于整行数据的读取操作。
缺点:
- 单列查询时,会读取一些不必要的数据。
按列存储
按列存储:数据以列为单位,存储在底层文件系统中。
优点:
- 有利于面向单列数据的读取/统计等操作。
缺点:
- 整行读取时,可能需要多次I/O操作。
HBase逻辑概念与实例
HBase基本定义
HBase(Hadoop DataBase)起源于Google Bigtable,它是基于Key-Value列式存储格式系统,它是一个分布式的数据库,并支持海量数据的存储,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。
- 适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别;
- 利用Hadoop HDFS(Hadoop Distributed File System)作为其文件
存储系统,提供实时读写的分布式数据库系统; - 利用ZooKeeper作为协同服务。
HBase应用场景
- 海量数据(TB、PB)
- 高吞吐量
- 需要在海量数据中实现高效的随机读取
- 需要很好的性能伸缩能力
- 能够同时处理结构化和非结构化的数据
- 不需要完全拥有传统关系型数据库所具备的ACID特性
HBase产品定位
HBase作为一个高可靠性、高性能、面向列、可伸缩的分布式数据库,提供海量数据存储功能,用来解决关系型数据库在处理海量数据时的局限性。
HBase设计目标
–海量数据量存储
–高并发操作
–数据随机读写操作
–数据强一致性
HBase逻辑概念表
表Table
–Hbase以表为单位组织数据
行Row
–表中数据以行为单位,byte[]存储
行键RowKey
–row key是用来检索记录的主键
–各行数据按RowKey以字典序排序
–访问Hbase Table中的行,只有三种方式
—— 通过单个row key访问
—— 通过row key的range
—— 全表扫描
HBase逻辑概念
- 列族Column Family
–各行数据列族相同,但不是每个列族中都需要有数据 - 列限定符Column Qualifier
–HBase表中的每个列,都归属与某个列族 - 单元格Cell
–HBase表中的每个列,都归属与某个列族
–单元格存放的数据成为单元格的值,没有类型,byte[]存储 - 时间戳Timstamp
–单元格的值可以有多个版本,各个版本由版本号区分
–默认版本号为值被写入的时间戳
HBase逻辑视图实例
HBase表的特点
- 表可以很大
–单个表可以有数十亿行,上百万列 - 无模式
–每行有任意多的列,列可以动态增加,不同行可以有不同的列,列的类型没有限制 - 面向列族的存储
–面向列族的存储和权限控制,支持列族独立检索 - 稀疏
–空(null)列不占存储空间,表可以非常稀疏 - 数据多版本
–每个单元格中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳 - 数据类型单一
–所有数据都是byte[]数组,没有类型
HBase物理概念与架构
Region
–region是Hbase中分布式存储和负载的最小单元
–单个table一开始只有一个region
–随着记录越来越多,单个region太大,达到阈值,分裂成2个region(region split)
RegionServer
–不同region分布在不同的RegionServer上。
Store
–Region虽然是分布式存储的最小单元,但不是存储的最小单元
–Region由多个store组成,每个store保存个Column Family
–每个store由1个MemStore和0到多个StoreFile组成
–MemStore存储在内存中,StoreFile存储在HDFS上,底层称为Hfile
HFile
–存储排序的key-value映射结构
–文件由连续的块(默认64K)组成,块的索引信息存储在文件尾部
–打开Hfile时会优先在内存中加载块信息
——HFile Compaction(压缩)
HFile Compaction压缩策略
-
Compact
–把多个小的HFile合并成一个大的文件
–减少HFile数量,提升读效率
–执行时严重影响HBase性能
–触发后不能停止 -
Minor Compact
–把多个小的HFile合成数量较少的大的Hfile
–合并较快,但是会影响磁盘IO -
Major Compact
–一个store下的所有文件合并
–删除过期版本数据
–删除delete marker数据
–指定间隔时间或手动执行
HBase的架构
HBase基本组件
- HMaster
–管理用户对table的创建删除修改操作
–为Region server分配region
–负责Region server的负载均衡
–发现失效的Region server并重新分配其上的region
- Region Server
–维护region,处理对这些region的IO请求,直接与client进行数据通信
–负责切分(split)在运行过程中变得过大的region
–对region进行compact操作
–在运行中可以动态添加、删除
- Client
–包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息
- ZooKeeper
–通过选举,保证任何时候,集群中只有一个HMaster,HMaster与RegionServer启动时会ZooKeeper注册。
–存储所有Region的寻址入口。
–实时监控Region server的上线和下线信息,并实时通知给HMaster。
–存储HBase的schema和table元数据,如column family。
–Zookeeper的引入使得HMaster不再是单点故障。
HBase容错与恢复
HBase容错
- HMaster容错
–多个HMaster,同一时间只有一个active
–HMaster失效,由ZooKeeper选择另一个HMaster
–若无Hmaster:
-
读操作正常进行,因为region信息还在
-
region切分、负载均衡无法进行
-
RegionServer容错
–定时向Zookeeper发送心跳
–超时则HMaster将该RegionServer上的Region重新分配到其他RegionServer
HBase修复
- HLog
–HLog是一个实现Write Ahead Log类,每次写入HLog
–每个RegionServer维护一个HLog
–HLog定期删除旧的文件(已经持久化到HFile的数据)
- RegionServer意外中止
–HMaster通过ZooKeeper感知
–处理HLog,针对不同的Region拆分Log数据
–重新分配失效region
–通过HLog信息重新写进MemStore,然后flush到HFile
文章出处登录后可见!