伴学笔记 数据库与存储系统丨豆包MarsCodeAI刷题

36 阅读3分钟

一、经典案例

二、存储&数据库介绍

存储系统

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件

  • User、Medium、Memory、Network
  • 特点:性能敏感、即“简单”有“复杂”、容易受硬件影响

硬件:存储器层级结构

软件:Summaryof i/Obuffering

  • 缓存很重要,贯穿整个存储体系
  • 拷贝很昂贵,应该尽量减少
  • 硬件设备五花八门,需要有抽象统一的接入层
RAID技术
  • RAID
    • 独立(廉价)磁盘冗余阵列(Redundant Array of Independent Disks)
    • 将多个物理硬盘通过特定的方式组合成一个虚拟硬盘阵列
    • 提高存储性能、数据冗余和容错能力
  • RAID级别
    • RAID 0 -- 条带化
      • 多块磁盘简单组合
      • 数据条带化,提高磁盘带宽
      • 没有额外的容错设计
    • RAID 1 -- 镜像
      • 一块磁盘对应一块额外镜像盘
      • 真实空间利用率仅为50%
      • 容错能力强
    • RAID 0 + 1 -- 条带化 + 镜像
      • 集合了RAID 0和RAID 1
      • 真实空间利用率仅为50%
      • 容错能力强,写入带宽高
    • 其他RAID级别

数据库

  • 关系 = 集合 = 任意元素组成的若干有序偶对
    • 反映了事物间的关系
  • 关系代数 = 对关系作运算的抽象查询语言
  • SQL = 一种DSL(领域特定语言)=方便人类阅读的关系代数表达形式
  • 事务特点(ACID)
    • A(tomicity):事务内的操作要么全做,要要么不做
    • C(onsistency):事务执行前后,数据状态是一致的
    • I(solation):可以隔离多个并发事务,避免影响
    • D(urability):事务一旦提交成功,数据保证持久性
  • 关系型数据库
    • 结构化数据优化
    • 支持事务(ACID)
    • 支持复杂查询
  • 非关系型数据库
    • 半结构化数据友好
    • 可能支持事务(ACID)
    • 可能支持复杂查询
数据库vs存储系统
  • 结构化数据管理,以表形式管理 vs 自行管理结构
  • 事务能力的优越性
  • 复杂查询能力灵活、简洁 vs 僵化复杂
数据库使用方式

Everything is D(omain) S(pecific) L(anguage) —> maybe SQL

  • 数据操作
    • Insert、Update、Select、Delete、Where子句、GroupBy、OrderBy
  • 数据定义修改
    • Create user、Create table、Create database、Alter table.....

三、主流存储产品剖析

单机系统

单机存储 = 单个计算机节点上的存储系统软件,一般不涉及网络交互

本地文件系统

Linux经典哲学:一切皆文件

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

分布式存储系统

分布式存储系统 = 在单机存储基础上实现了分布式协议,涉及大量网络交互

分布式文件系统 HDFS

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

核心特点:

  • 支持海量数据存储
  • 高容错性
  • 弱POSIX语义
  • 使用普通x86服务器,性价比高
分布式对象存储 Ceph

核心特点:

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

单机数据库

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

单机关系型数据库

单机非关系型数据库

MongoDB、Redis、Elasticsearch三足鼎立

  • 交互方式各不相同,没有统一的SQL
  • 数据结构无关系约束,schema相对灵活
  • 尝试支持SQL(子集)和“事务”

分布式数据库

单机数据库的文件与挑战

More to Do

四、新技术演进