存储的本质 | 青训营笔记

99 阅读1分钟

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

存储的本质

经典案例

一条数据的流动

客户端->后端服务器->数据库->其它系统

数据在数据库中的操作(数据持久化)

验证数据合法性->修改内存(用高效的数据结构组织数据)->写入存储介质(以寿命性能友好的方式写入硬盘)

存储和数据库简介

存储

存储系统:提供读写、控制类接口,能够安全有效的把数据持久化的软件

特点:性能敏感、系统软件架构容易受硬件影响、系统代码简单又复杂

存储器层级结构:

金字塔结构,塔顶的存储器类型的存储空间小但是访问迅速方便、塔底的存储器类型的存储空间大但是访问慢且困难,中间的存储器类型兼顾空间和速度--Persistent Memory

数据从软件到硬件:

缓存贯穿整个存储体系、拷贝很昂贵,尽量减少、硬件设备众多,需要抽象出统一的接入层

RAID技术:高性能、高性价比、高可靠性的硬盘

RAID背景:

单块大容量磁盘价格>多块小磁盘

单块写入能力<多块并发写入

单块磁盘容错能力有限,不够安全

数据库

关系型数据库:存储系统、结构化数据友好、支持事务(A原子性、C一致性、I隔离性、D持久性)、支持复杂查询语句(SQL)

非关系型数据库:一般不要求严格结构化、半结构化数据友好、可能支持事务、可能支持复杂查询语句

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

一条数据写入关系型数据库,以表形式管理(方便、可视化)、支持事务、使用SQL语句操作,写入经典存储系统需要自行定义管理结构(繁琐)

主流产品

单机存储

本地文件系统、K-V存储系统(LSM-Tree,追求写入性能、牺牲读性能)

分布式存储

分布式文件系统:HDFS:海量存储、高容错、弱POSIX语义、高性价比

分布式对象存储:Ceph:支持对象接口、块接口、文件接口,但是一切皆对象、数据写入采用主备复制模型、数据分布模型采用CRUSH算法

单机数据库

关系型数据库:Query Engine(查询)、Txn Manager(事务)、Lock Manager(锁)、 Storage Engine(存储)、Replication(主备同步)

关键内存数据结构:B-Tree、B+-Tree、LRU List等

关键磁盘数据结构:WriteAheadLog、Page

非关系型数据库:

MongoDB(面向文档存储、支持事务和弱SQL)

Redis(数据结构丰富、超高性能)

Elasticsearch(面向文档存储、依赖Lucene引擎、支持弱SQL)

特点:交互方式各不相同、schema相对灵活、尝试支持SQL和事务

分布式数据库

存储节点池化、动态扩缩容、解决弹性问题、解决性价比问题

扩展视野

SPDK(Storage Performance Development Kit)

Kernel Space -> User Space :避免syscall带来的性能损耗,直接从用户态访问磁盘

中断 -> 轮询:SPDK poller 绑定特定的cpu核不断轮询,减少cs,提高性能

无锁数据结构:使用Lock-free queue,降低并发时的同步开销