数据库与存储系统(一) | 青训营笔记

67 阅读2分钟
数据的流动

用户产生数据 -> 到达后端服务器 -> 到达数据库 -> 其他系统

  • 在到达数据库系统后,后面非常可能还有其他系统,但本篇文章主要学习数据库与存储系统,所以不对其做解释 image.png

存储系统

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

存储系统的特点
  1. 作为后端软件的底座,性能敏感
    • 要考虑到后端频繁的并发去操作数据库
  2. 存储系统代码,既“简单”又“复杂”
    • 简单:存储系统对性能要求高,所以在存储系统的IO路径上,代码一定不能写的太复杂,不能有很多分支,导致系统性能差
    • 复杂:在IO路径上的一些错误处理的分支上,要考虑到所有的异常情况;例如软件可能会出错,硬件可能会坏
  3. 存储系统软件架构,容易受硬件影响
    • 存储系统直接和硬件打交道,硬件发生一些变革,存储系统的软件可能要推倒重写,受硬件影响比较大
RAID技术

RAID(Redundant Array of Inexpensive Disks)技术让单机存储系统做到高性能/高性价比/高可靠性!

RAID出现的背景:

  1. 单块大容量磁盘的价格>多块小容量磁盘
  2. 单块磁盘的写入性能<多块磁盘的并发写入性能
  3. 单块磁盘的容错能力有限,不够安全
RAID技术的组合
  • RAID 0

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

    • 一块磁盘对应一块额外镜像盘
    • 真实空间利用率仅50%(因为有镜像盘)
    • 容错能力强

前面两种是走了两个方向的极端,那么有没有一个方案综合它们的优点呢?那就是RAID 0 + 1

  • RAID 0+1
    • 结合了RAID 0和RAID 1
    • 真实空间利用率仅50%
    • 容错能力强、写入宽带好

上面的内容都是存储系统,下面是关于数据库的

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

  • 关系(Relation)是什么?

    • 由Edgar.F.Codd于1970年提出【关系模型】
    • 关系 = 集合 = 任意元素组成的若干有序偶对,反应了事物间的关系
  • 关系代数

    • 对关系作运算的抽象查询语言
    • 如:交、并、笛卡尔积
  • SQL

    • 一种DSL
    • 方便人类阅读的关系代数表达形式
  • 关系型数据库是存储系统,在存储之外,发展出的其它能力

    • 结构化数据友好、支持事务(ACID),支持复杂查询语言
  • 非关系型数据库也是存储系统,但是一般不要求严格的结构化

    • 半结构化、非结构数据友好;可能支持事务(ACID);可能支持复杂查询语言

下图展示了使用关系型数据库和自己维护存储的数据的区别
前者仅需关系增删改查,后者需要自己定义和管理结构,非常麻烦

image.png

事务的优越性

  • A(Atomicity):原子性;事务内的操作要么全做,要么不做
  • C(Consistency):一致性;事务执行前后,数据状态是一致的;以转账做例子,A转账给B,转账前后,整个系统内的金额总和是不变的
  • I(Isolation):隔离;可以隔离多个并发事务,避免影响
  • D(Durability):持久性;事务一旦提交成功,数据保证持久性

  • 如果要做一个如图的复杂查询
    • 自己使用代码去实现(图右)是很麻烦的,代码量很大
    • 而如果使用关系型数据库支持的复杂查询(使用SQL)只需要图左的几行代码 image.png
课后总结

在今天的学习中,我对存储系统和数据库有了更深入的了解。我认识到存储系统是后端软件的重要组成部分,它负责将用户产生的数据持久化存储,并提供读写和控制接口。存储系统需要考虑到高并发操作数据库的情况,因此在设计上需要保持简单而高效。这些知识将对我的后续学习和实践有很大的帮助。