13.带你认识存储的本质| 青训营笔记

16 阅读3分钟

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

数据持久化,用高效的数据结构组织数据。

存储系统,对性能敏感,读写路径不会很复杂,非io路径上考虑多种异常情况,比如硬件损坏,容易受硬件影响。

persistent memory,缓存很重要,贯穿整个存储体系,拷贝很昂贵,应该尽量减少,硬件设备五花八门,需要有抽象统一的接入层。

RAID技术

单机存储系统做到高性能,高性价比,高可靠性。单块大容量磁盘大于多块小容量磁盘,多块磁盘并发写入的性能大于单块磁盘写入的性能,单块磁盘容错能力有限,

raid0 :多块磁盘简单组合,数据条带化存储,没有额外的容错设计,没有数据备份,性能提高了,但是没有容错

raid1:多块磁盘组合不是为了提高性能而是为了做容错,和raid0是两个极端

raid0+1 真实空间利用率50%,容错能力强,容错效果好

数据库和存储系统

关系型数据库:一个存储系统,存储之外,对结构化数据友好,支持事务,支持复杂的查询语言,比如sql。

非关系型数据库:例如redis等

数据库可能对注册的小明信息用表的形式管理,如果用经典的存储系统,写入文件,自行定义管理结构,可能要自己定义一个结构体,就是写入文件。要描述一下一个字段多长,比如4 bytes这种,非常痛苦,一直要想偏移多少个byte

第二点,数据库支持事务,acid,全做和不做的概念,

第三点,数据库有很复杂的查询的简单办法,如果普通文件操作,可能要写一大段代码,而数据库只需要写简单的几行sql

主流产品分析

1.单机存储

linux:一切都是文件,用inode管理,单机存储,常见使用方式,key-value存储,底层数据结构一般是LSM-Tree,某种程度上牺牲读性能,追求写性能。

2.分布式存储

hdfs,专用的高级硬件很贵,存储量很大,要求超高吞吐;hdfs核心特点:支持海量数据存储,高容错性,弱posix语义,使用普通x86服务器,性价比高,在hdfs上又发展出了hadoop计算模式。ceph,数据分布模型采用crush算法

3.单机关系型数据库

单个计算机节点上的数据库系统,mysql,postgresql,btree b+tree lru list,redolog事务执行过程中的...,

4.单机非关系型数据库

有些内卷,渐渐的都开始支持了弱sql

mongodb,redis,elasticsearch,

es:面向文档存储,可以序列化为json,依赖lucene引擎,实现了大量搜索数据结构,算法,restful,模糊搜索,

mongodb:灵活,collection

redis,数据结构丰富,多sdk

5.分布式数据库

单机数据库遇到了容量,弹性和性价比问题。分布式数据库,解决容量问题,单点容量有限,受到硬件限制,存储节点池化的做法,存储节点池达到一定内存,自动扩展节点,数据库不用感知。

cpu资源紧张,16核不够用,扩容,升级成32核,扩容是一个很漫长的过程,而且如果用户没那么火爆,又缩容,有问题。池化也可以解决扩缩容的问题。

分布式数据库 要找一个很好的算法支持多写,第二个面临的问题是从磁盘弹性到内存弹性,第三个面临的问题是分布式事务的优化。

新技术的演进

软件架构已经很多年没有大的变更了,人工智能的引入?SPDK