前世今生
- 数据库(Database,简称DB)
定义:有组织、可共享
特征:- 数据按一定的数据模型组织、描述和储存
- 可为各种用户共享
- 冗余度小
- 独立性高
- 易扩展
- 数据库管理系统DBMS(DataBase Management System)
位于用户和操作系统之间
帮助用户有效地组织和存储数据、高效获取有用信息的一层计算机系统软件 - 文件系统阶段
- 数据长期保存
- 文件管理数据
- 共享性差
- 独立性差
- 数据库系统阶段
- 数据结构化
- 数据的共享性高,冗余度低,易扩充
- 数据独立性高
- 数据由DBMS统一管理和控制
- 偷老师的对比图
数据模型
- 概念模型
- 逻辑模型和物理模型
逻辑模型主要包括网状模型、层次模型、关系模型、面向对象模型等
物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法
- 关系模型
在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。 - 关系型数据库
标准数据查询语言SQL(结构化查询语言) - 基本概念:
- 结构化数据
- 非结构化数据
- 半结构化数据
- NoSQL数据库:Not Only SQL
- 不需要预定义模式
- 保证BASE特性
- 关系数据库设计准则:ACID
- 原子性(Atomicity)
- 一致性(Consistency)
- 事务独立(Isolation)
- 持久性(Durability)
- NoSQL数据库设计准则:BASE
- 基本可用(Basically Available)
- 软状态或者柔性状态(Soft State)
- 最终一致性(Eventual Consistency)
- BASE vs ACID
- ACID更强调数据一致性,这是传统数据库设计的思路
- BASE更强调可用性,弱化数据强一致性的概念,这是互联网时代对于大规模分布式数据系统的一种需求
BigTable
数据模型
行主键、列主键、时间,三维主键
整体架构
-
主控服务器(Master Server)
负责管理工作- Servers目录:子表服务器的地址信息
- root目录:读取元数据表MetaData Table
- 启动流程:
-
子表服务器(Tablet Server)
- 来存储和管理子表数据
- 更新子表数据:首先将更新命令记入CommitLog文件中,之后将更新数据写入内存的MemTable结构中。当MemTable里容纳的数据超过设定大小时,将内容输出到GFS文件系统中,形成一个新的SSTable文件
- SSTable:数据存储区和索引区
- 读取子表数据:在MemTable和SSTable中存储的数据都是按照“ 行主键”的字母顺序排序的。除了块索引外,还加入布隆过滤器
- SSTable合并:微合并(Minor Compaction )、部分合并(Merging Compaction)以及主合并(Major Compaction)
- 子表恢复:子表服务器重新启动后,会从元数据子表中读取管理信息,包括子表服务器负责管理的子表对应哪些SSTable文件、以及CommitLog对应的恢复点。将恢复点位置之后的所有更新行为到MemTable中,重建MemTable。
-
客户端程序(Client)
HBase
- Client:Client端使用Hbase的RPC机制与HMaster和HRegionServer进行通信
- ZooKeeper:存储了ROOT表的地址、HMaster的地址和HRegionServer地址
- HMaster:Hbase主节点,将Region分配给HRegionServer,协调HRegionServer的负载并维护集群状态
- HRegionServer:HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据