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
    4
    atomicity - 事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生
    consistency - 数据库事务不饿能破坏关系数据的完整性以及业务逻辑上的一致性
    isolation - 多个事务并发访问时,事务之间是隔离带,一个事务不应该影响其他事务运行的效果
    durability - 在事务完成以后,该事务对数据库所做的更改便持久的保存在数据库之中,并不会被回滚