课程笔记:存储与数据库 | 青训营

66 阅读5分钟

存储系统

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统

存储器层级结构(硬件)

Pasted image 20230821164454.png 塔尖容量小且访问速度快,塔底容量更大但是访问速度慢

Persistent Memory(持久内存):结合了存储介质的非易失性和内存的高速访问特点。

数据怎么从应用到存储介质(软件)

  • 存储链路上 缓存 很重要,贯穿整个存储体系。硬件存储介质访问方式可能并不方便,缓存使得访问方式更为友好
  • 拷贝 很昂贵,应该尽量减少。存储链路上可能会经历多次数据拷贝
  • 硬件设备五花八门,需要有抽象统一的接入层 例子:用户数据从持久化到单机储存 Pasted image 20230821165101.png

RAID技术

Redunbant Array of Inexpensive Disks

RAID 0

  • 多块磁盘简单组合
  • 数据条带化存储,提高磁盘带宽
  • 没有额外的容错设计

RAID 1

  • 一块磁盘对应一块额外镜像磁盘
  • 真实空间利用率50%
  • 容错能力强但并没有性能上的提升

RAID 0+1

  • 结合以上两者的特点
  • 真实空间利用率仅50%
  • 容错能力强,写入带宽好

数据库

关系型数据库和非关系型数据库

  • 关系=集合=任意元素组成的若干有序偶对应反应了事物间的关系
  • 关系代数=对关系做运算的抽象查询语言
  • SQL=一种DSL=方便人类阅读的关系代数表达形式

关系型数据库是一种存储系统,同时具有以下功能:

  1. 结构化数据友好
  2. 支持事务(ACID)
  3. 支持复杂查询语言

非关系型数据库也是一种存储系统,但是一般不要求严格的结构化

  1. 半结构化数据友好
  2. 可能支持事务(ACID)
  3. 可能支持复杂查询语言

对比:结构化数据管理

一条用户注册数据写入关系型数据库可能以表形式管理。非关系型数据库没有预定义的模式,数据可以自行定义管理结构存储,如文档、键值对、图形等。

对比:事务能力

事务具有:

  1. Atomicity,事务内操作要么全做,要么不做
  2. Consistency,事务执行前后,数据状态是一致的
  3. Isolation,可以隔离多个并发事务,避免影响
  4. Durability,事务一旦提交成功,数据保证持久性

经典存储相比数据库需要更多的代码逻辑来实现较好的事务能力

主流产品剖析

单机存储

单个计算机节点上的存储软件系统,一般不涉及网络交互,例如本地文件系统,key-value存储

本地文件系统 - 以Linux为例

  • 文件系统的管理单元:文件
  • 文件系统接口:文件系统繁多,如Ext2/3/4, sysfs, rootfs等,但都遵循VFS的统一抽象接口
  • Linux文件系统的两大数据结构:Index Node & Directory Entry

Index Node 记录文件元数据,如id、大小、权限、磁盘位置等。inode是文件的唯一标识,会被储存到磁盘上,inode的总数在格式化文件紫铜时就固定了

Directory Entry记录文件名、inode指针、层级关系(parent)等,dentry是内存结构,与inode的关系是N:1(hardlink实现)

key-value存储

常见使用方式:put(k, v) & get(k) 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能

拳头产品:RocksDB

顺序写入key-value,左边内存数据结构MemTable中满了后将MemTable中的内容储存到Immutable MemTable,一段时间后写入Disk。Disk中Level 0中装满后在下刷到Level 1 Pasted image 20230823110329.png

分布式存储

在单机存储基础上实现了分布式协议,涉及大量网络交互,例如分布式文件系统、分布式对象存储

HDFS

特点:

  • 支持海量数据存储
  • 高容错性
  • 弱POSIX语义
  • 使用普遍x86服务器,性价比高 Pasted image 20230823122724.png

Ceph

  • 一套系统支持对象接口、块接口、文件接口,一切皆对象
  • 数据写入采用主备复制模型
  • 数据分布模型采用CRUSH分布算法(HASH + 权重 + 随机抽签) Pasted image 20230823123739.png

单机数据库

单机数据库 = 单个计算机节点上的数据库系统,事务在单机内进行,也可能通过网络交互实现分布式业务

单机关系型数据库Oracle, MySQL, PostgreSQL

Pasted image 20230823125855.png 内存中数据基本为树状,当用户更改数据时即为更新Page,同时记录操作日志(Redo Log)。 磁盘中有三类文件Page File, Redo Log Files, Others(例如临时数据)

MySQL

关系型数据库通用组件:

  • Query Engine —— 负责解析query,生成查询计划
  • Txn Manager —— 负责事务并发管理
  • Lock Manager —— 负责锁相关策略
  • Storage Engine —— 负责组织内存/磁盘数据结构
  • Replication —— 负责主备同步

PostgreSQL

  • 关键内存数据结构:B-Tree, B+-Tree, LRU List等
  • 关键磁盘数据结构:WriteAheadLog(RedoLog), Page

单机非关系型数据库MongoDB, Redis, Elasticsearch

Elasticsearch

  • 面向文档存储
  • 文档可序列化成JSON,支持嵌套
  • 存在index,index = 文档的集合
  • 存储和构建索引能力依赖Lucene引擎
  • 实现了大量搜索数据结构&算法
  • 支持RESTFUL API,也支持弱SQL交互

mongoDB

  • 面向文本存储
  • 文档可序列化成JSON/BSON,支持嵌套
  • 存储和构建索引能力依赖wiredTiger引擎
  • 4.0之后开始支持事务(多文档、跨分片多文档等)
  • 常用client/SDK交互,可通过插件转译支持弱SQL

Redis

  • 数据结构丰富(hash表, set, zset, list)
  • C语言实现,超高性能
  • 主要基于内存,但支持AOF/RDB持久化
  • 常用redis-cil/多语言SDK交互