认识存储的本质 | 青训营笔记

59 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第16天

问题

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

存储&数据库简介

存储系统:

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

特点:

作为后端软件的底座, 性能敏感 存储系统代码, 既"简单"又"复杂": 性能要求高, 因此代码要简单. 要考虑多种异常情况, 故代码会复杂 存储系统软件架构, 容易受硬件影响

存储器层级结构:

Computer Memory Hierarchy

塔尖: 性能高, 容量小 塔底: 性能低, 容量大 各层代表: processor register 处理器寄存器 processor cache 处理器缓存 random access memory 随机存取存储器 flash/USB memory hard drivers 硬盘驱动器(简称, 硬盘) tape backup 磁带备份

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

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

拷贝: 很昂贵, 应该尽量减少

RAID

Q: 单机存储系统怎么做到高性能/高性价比/高可靠性? A: Redundant Array of Inexpensive Disks

RAID出现的背景: 单块大容量磁盘的价格 > 多块小容量磁盘 单块磁盘的写入性能 < 多块磁盘的并发写入性能 单块磁盘的容错能力有限, 不够安全

RAID 0 多块磁盘简单组合 数据条带化存储, 提高磁盘带宽 没有额外的容错设计 RAID 1 一块磁盘对应一块额外镜像盘 真实空间利用率仅50% 容错能力强 RAID 0+1 结合了RAID 0和RAID 1 真实空间利用率仅50% 容错能力强, 数据条带化存储, 写入带宽好

数据库

关系(Relation)是什么?

Edgar.F.Codd于1970年提出[关系模型]

关系=集合=任意元素组成的若干偶对的集合

关系代数=对关系作运算的抽象查询语言(如交, 并, 笛卡尔积)

SQL=一种DSL=方便人类阅读的关系代数表达形式

DSL: Domain Specific Language 领域专用语言. 区别于GPL

GPL: General Purpose Language 通用编程语言

关系型数据库特点

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

非关系型数据库特点

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

数据库 vs 经典存储

1 结构化数据管理

数据库: 以表形式管理(关系型数据库) 经典存储: 写入文件, 自行定义管理结构

2 事务能力

数据库可以支持事务(ACID: Atomicity原子性, Consistency一致性, Isolation隔离性, Durability持久性)

3 复杂查询能力 数据库: 灵活, 简洁 经典存储: 僵化, 复杂

补充

单机存储

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

分布式存储

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

单机关系型数据库

单机数据库: 单个计算机节点上的数据库系统

事务在单机内执行, 也可能通过网络交互实现分布式事务

关系型数据库

商业产品Oracle称王, 开源产品MySQL & PostgreSQL称霸

单机非关系型数据库

MongoDB, Redis, Elasticsearch三足鼎立

分布式数据库

容量, 弹性, 性价比问题: 单点受硬件限制 解决: 存储节点池化, 动态扩缩容

More To Do: 单写 -> 多写 磁盘弹性 -> 内存弹性 分布式事务优化

新技术演进

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