这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
存储系统概览
什么是存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。
用户,存储介质,内存,网络
系统特点
性能敏感,容易受硬件影响,代码既简单、又复杂(IO路径上代码不能过于复杂,但非IO路径上,或IO路径的异常处理路径上,需要考虑各种异常情况)。
层级结构
寄存器,高速缓存,内存,闪存,硬盘,磁带
越顶端,速度越快,容量越小,价格越高。
RAID技术
单机存储系统如何做到高性能、高性价比、高可靠性
Redundant Array of Inexpensive Disks
- 单块大容量磁盘的价格 > 多块小容量磁盘
- 单块磁盘的写入性能 < 多块磁盘的并发写入性能
- 单块磁盘的容错能力有限,不够安全
RAID 0
- 多块磁盘简单组合
- 数据条带化存储,提高磁盘带宽
- 没有额外的容错设计
RAID 1
- 一块磁盘对应一块额外镜像盘
- 真实空间利用率仅50%
- 容错能力强
RAID 0+1
- 结合了RAID 0和RAID 1
- 真实空间利用率仅50%
- 容错能力强,写入带宽好
数据库
数据库分为关系型数据库,非关系型数据库
关系型数据库
关系: 任意元素组成的若干有序偶对,反应了事物间的关系
关系代数:对关系作运算的抽象查询语言,并、交、笛卡尔积等
SQL:一种DSL(Domain Specific Language领域专用语言),方便人类阅读的关系代数表达式
关系型数据库:是一种存储系统,在存储之外,又发展出其他能力(结构化数据友好,支持事务,支持复杂查询语言)
非关系型数据库
非关系型数据库也是存储系统,但是一般一要求严格的结构化。半结构化数据友好,可能支持事务,可能支持复杂查询语言
数据库 VS 经典存储
结构化数据管理
关系刑数据库以表的形式管理结构化数据。经典存储需要自行定义存储结构。
事务能力
数据库支持事务。事务具有原子性,一致性,隔离性,持久性。
复杂查询能力
数据库支持用灵活、简洁的查询方式。
主流存储产品
单机存储
本地文件系统
Linux经典哲学:一切皆文件
文件系统的管理单元:文件
文件系统接口:Ext2/3/4, sysfs, rootfs等,都遵循VFS的统一抽象接口
Linux文件系统的两大数据结构: Index Node和Directory Entry
Index node:记录文件的元数据。inode是一个文件的唯一标识,会被存储到磁盘上,innocd的总数在格式化文件系统的时间就确定了。
Directory Entry:记录文件名,innode指针,层级关系等,dentry是内在结构,与inode是n:1的关系。
Key-value存储
put(k, v) get(k)
常见数据结构: LSM-Tree牺牲读性能,追求写入性能。
拳头产品:RocksDB
分布式存储
在单机存储基础上实现了分布式协议,涉及大量网络交互。
可分为分布式文件存储和分布式对象存储两类。
- HDFS
- CEPH
单机数据库
单机数据库:单个计算机节点上的数据库,事务可在单机内执行,也可通过网络交互实现分布式事务。
关系型数据库
- 商业产品:Oracle
- 开源产品:MySQL、PostgreSQL
非关系型数据库
- MongoDB 面向文档存储
- Redis 数据结构丰富,超高性能,基于内存。
- Elasticsearch 面向文档存储,实现大量搜索数据结构和算法
从单机到分布式数据库
- 解决容量问题: 存储节点池化,支持动态扩缩容
- 解决弹性问题
- 解决性价比问题