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

100 阅读6分钟

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

这是我参与【第五届青训营】伴学笔记创作活动的第14天。

一、重点知识

  • 数据存储的定义、特点、数据如何存储
  • 数据库:常见数据库、架构、与数据存储到区别
  • 常见数据存储与数据库

二、详细知识点

1. 经典案例

  • 数据的产生: 注册生成大量数据
  • 数据的流动:用户的数据存到后端服务器->数据库
    • 持久化之后才能存储下来
    • 若不持久化,则没有记忆能力
  • 数据的持久化
    • 教验数据合法性
    • 修改内存:高效的数据结构组织数据
    • 写入存储介质
  • 潜在问题
    • 数据库如何保证数据不丢
    • 数据库怎么处理同时多人修改问题
    • 除了数据库外其他的存储系统
    • 数据库只能处理结构化数据么
    • 哪些操作数据库方式,编程语言?

2. 存储、数据库简介

2.1 存储系统

  • 系统概览:存储系统
    • 提供了读写、控制类接口
    • 能够安全有效的把数据持久化软件
  • 系统特点
    • 作为后端软件底座,性能敏感
    • 存储系统软件架构受硬件影响
    • 存储系统代码简单又复杂
  • 数据从应用到存储介质
    • 缓存:贯穿整个存储体系
    • 拷贝:昂贵,尽量减少
    • 硬件设备五花八门,需要抽象统一的接口 Screen Shot 2023-02-11 at 9.42.06 PM.png

2.2 RAID技术

  • 单机存储系统:高性能/高性价比/高可靠
  • Redundant Array of Inexpensive Disks
  • 背景
    • 单块大容量磁盘价格>多块小容量磁盘
    • 单块写入性能<多块磁盘并发写入性能
    • 单块磁盘容错能力有限,不够安全
  • RAID0
    • 多块磁盘简单组合
    • 数据条带化存储,提高磁盘带宽
    • 没有额外的容错设计
  • RAID1
    • 一块磁盘对应一块额外镜像盘
    • 真实空间利用率50%
    • 容错能力强
  • RAID 0+1
    • 结合两方优点
    • 真实空间利用率50%
    • 容错能力强,写入带宽好

2.3 数据库

  • 分类
    • 关系型数据库
      • 关系=集合=任意元素组成的若干有序偶对
      • 关系代数=对关系做运算的抽象查询语言
      • SQL=DSL=方便人类阅读的关系代数表达形式
      • 发展出其他能力
        • 结构化数据友好
        • 支持事务ACID
        • 支持复杂查询语言SQL
    • 非关系型数据库
      • 也是存储系统,不要求严格结构化
        • 半结构化数据友好
        • 可能支持事务
        • 可能支持复杂查询语言
  • 结构化数据管理
    • 写入关系性数据库:以表形式管理
    • 写入文件:自行定义管理结构
  • 事务能力
    • Atomicity:要么全做要么不做
    • Consistency:事务执行前后数据状态一致
    • Isolation:隔离多个并发事务避免影响
    • Durability:一旦提交成功,数据保证持久性
  • 复杂查询能力
    • 数据库可以SQL直接查询
    • 非数据库需要写代码

3. 主流产品剖析

3.1 单机存储

  • 单机存储:单个计算机节点上的存储系统
  • 本地文件系统
    • 文件系统管理单元:文件
    • 文件系统接口:Ext2/3/4,sysfs,rootfs,都遵循VFS统一抽象接口
    • Linux文件系统的两大数据结构
      • Index Node:记录文件元数据,文件的唯一标识,会被存储到磁盘上,inode总数在格式化文件系统时就固定了
      • Directory Entry:记录文件名、inode指针、层级关系等
        • dentry是内存结构,与inode N:1
  • KV存储
    • put(K,V) & get(K)
    • LSM-Tree:某种程度上牺牲读性能追求写入性能
    • RocksDB

3.2 分布式存储

  • 在单机存储基础上实现了分布式协议,大量网络交互
  • HDFS
    • 存储和管理分离,通过询问管理节点访问实际的存储节点
    • 支持海量数据存储
    • 高容错性
    • 弱POSIX语义
    • 普通x86服务器性价比高
  • Ceph
    • 核心特点:支持对象接口、块接口、文件接口,一切皆对象
    • 数据写入采用主备复制模型
    • 数据分布模型采用CRUSH算法:hash+权重+随机抽签

3.3 单机关系性数据库

  • 单机数据库:单个计算机节点上的数据库系统
  • 事务在单机内执行,也可能通过网络交互实现分布式事务
  • Oracle MySQL&PostgreSQL
    • 通用组件
      • Query Engine解析query生成查询计划
      • Txn manager:负责事务并发管理
      • Lock Manager:负责锁相关策略
      • Storage Engine:负责组织内存、磁盘数据结构
      • Replication:负责主备同步
    • 关键内存数据结构:B-Tree,B+ tree,LRU
    • 关键磁盘数据结构:WriteAheadLog(Redolog)、Page

3.4 单机非关系型数据库

  • MongoDB、Redis、Elasticsearch
  • 交互方式各不相同,数据结构千奇百怪,尝试支持SQL和事务
  • Elasticsearch
    • 面向文档存储
    • 文档可序列化为Json
    • 存在Index,文档的集合
    • 存储和构建索引能力依靠Lucene
    • 大量搜索数据结构/算法
    • 支持Restful API
  • MongoDB
    • 面向文档存储
    • 可序列化JSON/BSON 支持嵌套
    • 存在collection:文档集合
    • 存储构建索引依靠wiredTiger引擎
    • 4.0后支持事务
    • 常用client/SDK交互
    • 通过插件转译支持弱SQL
  • redis
    • 数据结构丰富:hash表、set、zset、list
    • c语言实现,超高性能
    • 主要基于内存,支持AOF/RDB持久化
    • 常用redis-client/多语言SDK交互

3.5 分布式数据库

  • 单机的问题:容量/弹性/性价比
  • 解决容量问题
    • 单点容量有限,受硬件限制
    • 存储节点池化,可以动态扩缩容
  • 解决弹性问题
    • 扩张搬迁的时候需要耗费大量时间
    • 缩容难以解决disk问题
    • 使用共享存储池,不需要扩展CPU、减少池
  • 需要解决的问题
    • 单写/多写
    • 从磁盘弹性到内存弹性
    • 分布式事务优化

4. 新技术演进

4.1 概览

  • 软件架构变更:bypass OS kernel
  • AI增强:智能存储格式转换
  • 新硬件革命
    • 存储介质变更
    • 计算单元变更
    • 网络硬件变更

4.2 SPDK

  • 避开OS的kernel space,直接放入用户态,避免syscall的性能损耗
  • 磁盘性能提高后中断次数随之上升,不利于IO性能;SPDK poller可以绑定特定CPU核不断轮询,减少cs提高性能
  • 无锁queue,降低并发时同步开销

4.3 AI&Storage

  • 数据存储格式转换
  • AI决策:行列混存

4.4 高性能硬件

  • RDMA网络:不经过传统网络协议,把用户态虚拟内存映射给网卡,减少拷贝开销CPU开销
  • Persistent Menory:可以用作易失性内存,也可用作持久化介质
  • 可编程交换机
  • CPU/GPU/DPU

三、课后总结

本节课主要介绍了存储与数据库相关的知识。在学习中对于关系型数据库的利用较为充分,而本节课介绍了非关系型数据库、分布式存储的相关内容,需要在今后的学习中进一步进行理解。

四、引用资料

学习资料