存储与数据库 | 笔记

122 阅读6分钟

课程地址:RDBMS 基本情况介绍 - 掘金 (juejin.cn)

认识存储与数据库

一条数据的生命周期

  • 例子:用户注册

    • 数据的产生:用户点击注册按钮填入信息并确认注册
    • 数据的流动:用户手机 -> 后端服务器 -> 数据库(持久化) -> 其他系统
  • 数据的持久化 1. 校验数据合法性 1. 修改内存:用高效的数据结构组织数据,即变成能存入数据库的样子 1. 写入存储介质:以寿命&性能友好的方式写入硬件

  • 潜在的问题

    • 数据库怎么保证数据不丢失?
    • 处理多人同时修改的问题?
    • 为什么用数据库,除了数据库还能存到别的存储系统吗?
    • 数据库只能处理结构化数据吗?
    • 有哪些操作数据库的方式,要用什么编程语言?

存储系统

  • 什么是存储系统:存储系统提供写入和读出计算机工作需要的信息(程序和数据)的能力,实现计算机的信息记忆功能。即一个提供了读写、控制类接口,能够安全有效的把数据持久化的软件。

  • 特点:

    • 作为后端软件的底座,对性能极其敏感

    • 存储系统软件架构,容易受硬件影响

    • 存储系统代码,既“简单”又“复杂”

      • 简单:在I/O路径上,代码不能很复杂,性能需要很高
      • 复杂:在错误处理上需要考虑很多异常情况
  • 存储器层级结构

    • 塔尖的存储设备:容量极小但能支撑超高性能的访问
    • 中间的存储设备(Persistent Memory)
    • 底部的存储设备:容量很大但读写速度很慢且访问方式不友好

数据怎么从应用到存储介质

  • 缓存:很重要,贯穿整个存储体系

    • 作用:让软件用硬件友好的方式与硬件交互
  • 拷贝:很昂贵,应尽量减少

    • 原因:很消耗CPU
  • 硬件设备五花八门,需要有抽象统一的接入层

RAID技术

  • 是什么:RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。

  • 出现的背景:

    • 单块大容量磁盘的价格 > 多块小容量磁盘
    • 单块磁盘写入性能 < 多块磁盘并发写入性能
    • 单块磁盘的容错能力有限,不够安全
  • 常见的RAID方案

    • RAID 0

      • 多块磁盘的简单组合
      • 数据条带化存储,提高磁盘带宽
      • 优点:写入性能提升
      • 缺点:没有额外的容错设计
    • RAID 1

      • 一块磁盘对应一个额外镜像盘
      • 优点:容错能力强
      • 缺点:真实空间利用率仅50%
    • RAID 0+1

      • 结合了RAID 0 和 RAID 1
      • 缺点:真实空间利用率仍为50%
      • 优点:有RAID 0 和RAID 1 的优点

数据库

数据库和存储系统的异同

数据库的两种类型
  • 关系型数据库:

    • 相同点:是存储系统,但是多了一些功能

    • 不同点

      • 结构化数据友好
      • 支持事务
      • 支持复杂查询语言(例如SQL语言)
  • 非关系型数据库

    • 相同点:是存储系统,但是一般不要求严格的结构化

    • 不同点

      • 半结构化数据友好
      • 可能支持事务
      • 可能支持复杂查询语言S
解释
  • 什么是 “关系”

    • 关系模型:集合,即任意元素组合的若干有序偶对
    • 关系代数:对关系作运算的抽象查询语言
    • SQL:一种DSL,方便人类阅读的关系代数表达形式
  • 什么是 “结构化数据管理”

    • 数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的,存储在数据库中
    • 能够用数据或统一的结构加以表示,如数字、符号
    • 能够用二维表结构来逻辑表达实现,包含属性和元组,如:成绩单就是属性,90分就是其对应的元组。
  • 事务能力

    • A (tomicity):事务内的操作要么全做,要么不做
    • C (onsistency):事务执行前后,数据状态是一致的
    • I (solation):可以隔离多个并发事务,避免影响
    • D (urability):事务一旦提交成功,数据保证持久性
  • 复杂的查询能力

    • 与经典存储系统相比,数据库的复杂查询代码更加灵活简洁

主流产品剖析

单机存储系统

  • 定义:单个计算机节点上的存储软件系统,一般不涉及网络交互
  • 例如:本地文件系统、Key-Value存储

本地文件系统

  • 管理单元:文件

  • 文件系统接口:文件系统很多,但都遵循VFS的统一抽象接口

  • Linux文件系统两大数据结构:Index Node & Directory Entry

    • Index Node:记录文件元数据,例如Id、大小、权限、磁盘位置等,inode是一个文件的唯一标识(一一对应),会被存储到磁盘上,inode的总数在格式化文件系统时就固定了

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

      • D-entry是一个纯内存的结构,不会被存到持久化设备上

Key-Value

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

分布式存储系统

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

分布式文件系统 - HDFS

  • HDFS - 大数据时代的基石

  • 时代背景:专用的高级硬件很贵,同时数据存量很大,要求超高吞吐

  • HDFS的核心特点:

    • 支持海量数据存储
    • 高容错性(当硬件坏了的时候数据不会丢)
    • 弱POSIX语义
    • 使用普通x86服务器,性价比高
  • 架构:

    • Management Node:管控面,在此拿到物理位置
    • Storage Node:用物理位置在此读取数据

开源分布式存储系统里的万金油 - Ceph

  • 核心特点:

    • 一套系统支持对象接口、块接口、文件接口,但是一切皆对象

    • 数据写入采用主备复制模型

      • 主备复制模型:写入数据时先写入主节点,做链状的冗余复制
    • 数据分布模型采用CRUSH算法

      • 数据分布模型:写入数据时,为保证可靠性和可用性,往往会将数据分成几个部分,在系统中做冗余存储,数据分布模型用于分配这几部分的分布
      • CRUSH算法:用HASH+权重+随机抽签的方式,确定落地存储的服务器

单机数据库

  • 定义:单个计算机节点上的数据库系统
  • 事务在单机内执行,也可能通过网络交互实现分布式事务
  • 分类:关系型数据库、非关系型数据库

关系型数据库

  • 商业产品:Oracle

  • 开源产品:MySQL & PostgreSQL

  • 关系型数据库通用组件:

    • Query Engine:负责解析quey,生成查询计划
    • Txn Manager:负责事务并发管理
    • Lock Manager:负责锁相关的策略
    • Storage Engine:负责组织内存/磁盘数据结构
    • Replication:负责主备同步
  • 关键内存数据结构:B-Tree、B+-Tree、LRU List等

  • 关键磁盘数据结构:WriteAheadLog(RedoLog)、Page

原理解释
image.png
  • Memory 内存结构

    • 数据在关系型数据库中用树状存储
    • Page:每个节点是一个Page
    • Modify:插入数据时本质上是更新Page结构
    • RedoLog:插入数据时的操作日志,保证数据不丢失
    • TempData:临时数据,当查询过程中内存不够用时,将计算结果放入TempData中,最后再拼起来
  • HardDisk 磁盘结构

    • PageFiles:对应内存结构中的树中的Page
    • RedoLog Files:存储事务执行过程中的RedoLog
    • Others:当内存不够用时先将TempData中的数据存入,等内存够用时在load到内存中进行整合

非关系型数据库

  • 与关系型数据库相比:

    • 非关系型数据库交互方式各不相同
    • 没有关系约束,schema相对灵活
  • 常见的非关系型数据库:mongoDB、Redis、Elasticsearch

分布式数据库

  • 优点:

    • 容量:单机容量有限,而储存节点池化(Storange Pool)可以动态扩缩容
    • 弹性:当用户更换硬件时,存储节点池化可以让用户不需要换硬盘进行数据复制或者删除
    • 性价比:存储池动态扩容比较便宜
  • 还可以升级的地方:

    • 并行写入
    • 内存弹性
    • 分布式事务优化

新技术演进

  • 软件架构变更:

    • 现有存储架构很多年没有革命性变更
    • 存储数据库软件强依赖于操作系统内核的一些链路
    • 新技术:Bypass OS kernel
  • AI增强

    • 只能存储格式转换
  • 新硬件革命

    • 存储介质变更
    • 计算单元变更
    • 网络硬件变更
  • SPDK - Bypass OS kernel已经成为一种趋势

image.png
  • AI & Storage

    在Storage领域,AI能带来什么改变

    • 行存储 -> 列存储 - AI存储 -> 行列混存

      • 用AI来决定行存储还是列存储
  • 高性能硬件

    • RDMA网络

      • 传统的网络协议栈,需要基于多层网络协议处理数据包,存在用户态&内核态的切换,足够通用但性能不是最佳
      • RDMA是kernel bypassl的流派,不经过传统的网络协议栈,可以把用户态虚拟内存映射给网卡,减少携贝开销,减少cpu开销
    • Persistent Memory

      • 在NVMe SSD和Main Memory间有一种全新的存储产品:Persistent Memory
      • IO时延介于SSD和Memory:之间,约百纳秒量级
      • 可以用作易失性内存(memory mode),也可以用作持久化介质(app-direct)
    • 可编程交换机

      • P4 Switch,配有编译器、计算单元、DRAM,可以在交换机层对网络包做计算逻辑。在数据库场景下,可以实现缓存一致性协议等
    • CPU/GPU/DPU

      • CPU:从multi-.core走向may-cofe
      • GPU:强大的算力&越来越大的显存空间
      • DPU:异构计算,减轻CPU的workload