reference: https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/gfs-sosp2003.pdf
- the google file system
cases
数据 - 产生-流动-持久化 - 生命周期
- 持久化 -> 校验数据的合法性 - 修改内存(用高效的数据结构组织数据) - 写入存储介质(以寿命&性能友好的方式写入硬件)
存储系统
- 提供了读写,控制类接口
- 安全有效地把数据持久化
- user - medium - memory - network
feature
- 后端软件的底座,性能敏感
- 存储系统软件架构,容易受硬件影响
- 代码-“简单”&“复杂”
存储器层级结构
- Computer Memory Hierarchy
- size | capacity
- 缓存 - 重要,贯穿整个存储体系
- 拷贝 - 贵,尽量减少
- 硬件设备五花八门,需要有抽象统一的接入层
RAID
- redundant array of inexpensive disks
- 价格|写入性能|容错能力
- 单块磁盘 vs 多块磁盘
- RAID0|1|0+1
数据库
overview
- 关系 - relation
- Edgar.F.Codd于1970年提出“关系模型”
- 关系代数 - 对关系作运算的抽象查询语言(交,并,笛卡尔积)
- 关系 - 集合 - 任意元素组成的若干有序偶对 反应了事物间的关系
- SQL - 一种DSL - 方便人类阅读的关系代数表达形式
feature
- 关系型数据库是存储系统,但是在存储之外,又发展出其他能力
- 结构化数据友好 | 支持事务ACID | 支持复杂查询语言
- 非关系型数据库也是存储系统,但是一般不要求严格的结构化
数据库 vs 经典存储
- 结构化数据管理 (写入关系型数据库,以表形式管理 | 写入文件,自行定义管理结构)
- 事务能力(突显出数据库支持事务的优越性)
- 事务
- atomicity - 事务内的操作要么全做,要么不做
- consistency - 事务执行前后,数据状态是一致的
- isolation - 可以隔离多个并法事务,避免影响
- durability - 事务一旦提交成功,数据保证持久性
- 复杂查询能力
数据库使用方式
- everythining is domain specific language
- maybe SQL
products
单机存储
- 单个计算机节点上的存储软件系统,一般不涉及网络交互
- 本地文件系统 | key-value 存储
- linux - 一切皆文件
- 文件系统的管理单元:文件
- 文件系统接口: ext2/3/4,sysfs,rootfs等,都遵循VFS的统一抽象接口
- index node: inode 是一个文件的唯一标识,记录文件元数据,如id,大小,权限,磁盘位置等
- directory entry: dentry是内存结构,与inode的关系是N:1(hardlink),记录文件名,inode指针,层级关系等
- key-value: put(k,v) & get(k) | LSM-tree,某种程度上牺牲读写性能,追求写入性能 | RocksDB
分布式存储
- 在单机存储基础上实现了分布式协议,涉及大量网络交互
- 分布式文件系统 | 分布式对象存储
- HDFS - 大数据时代基石
- Ceph - 开源分布式存储系统里的万金油
单机数据库
- 单个计算机节点上的数据库系统
- 事务在单机内执行,也可能通过网络交互实现分布式事务
- 关系型 - Oracle | MySql | PostgreSQL
1
2
3
4
5
6
7
8
9关系型数据库的通用组件
query engine - 负责解析query,生成查询计划
txn manager - 负责事务并发管理
lock manager - 负责锁相关的策略
storage engine - 负责组织内存/磁盘数据结构
replication - 负责主备同步
b-tree b+-tree LRU- list
WriteAheadLog(RedoLog) Page - 非关系型 - MongoDB | Redis | Elasticsearch
- 不管是否关系型数据库,大家都在尝试支持SQL(子集)和“事务”
RDBMS 事务 ACID
- 事务 - transaction - 一组SQL语句组成的一个程序执行单元,需要满足ACID的特性
- ACID
1
2
3
4atomicity - 事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生
consistency - 数据库事务不饿能破坏关系数据的完整性以及业务逻辑上的一致性
isolation - 多个事务并发访问时,事务之间是隔离带,一个事务不应该影响其他事务运行的效果
durability - 在事务完成以后,该事务对数据库所做的更改便持久的保存在数据库之中,并不会被回滚