这是我参与「第五届青训营 」伴学笔记创作活动的第28天。主要讲了存储系统和数据库系统以及一些主流产品,最后介绍了当前存储技术的一些发展趋势。
存储系统
存储系统 是一个提供了读写、控制类接口,能安全有效的把数据持久化的软件;
存储系统的特点:
- 性能敏感
- 容易受硬件影响
- 代码既(IO路径)简单又(错误处理)复杂
存储器层级结构
如下图所示,自定向下,存储容量逐渐增加,读写速度逐渐减少。
存储链路
为了缓解存储介质读写慢的问题,需要再数据到介质之间添加缓存,缓存贯穿整个存储系统,拷贝代价很大,应该尽量减少(特别是关键路径),需要有抽象的统一接口以屏蔽底层的硬件设备。
RAID技术
该技术出现的背景:
-
单块大容量磁盘贵
-
单块磁盘的写入性能低
-
单块磁盘的容错能力差
-
RAID 0:多块磁盘简单组合,数据条带化存储,提高磁盘带宽,没有容灾设计(提高性能)
-
RAID 1:一块磁盘对应一块额外镜像(提高容错)
-
RAID 0+1:多块磁盘组合且每块都有额外的镜像
数据库
数据之间是有一些关系的,为了处理数据间的关系,诞生了关系型数据库系统。
关系型数据库的特点
- 结构化数据友好
- 支持事务
- 支持复杂查询语言
非关系型数据库的特点
- 半结构化数据友好
- 不一定支持事务
- 不一定支持复杂查询语言
主流的存储产品
单机存储
不涉及到网络交互,分两个常见类型
- 文件系统: 管理单元是文件,都遵循VFS的统一抽象接口,Linux文件系统的两大数据结构为Index Node和Directory Entry。
- k-v存储系统: 常用的操作有PUT(K,V),GET(K),常见数据结构为LSM-Tree(追求写性能,牺牲读性能),RocksDB。
分布式存储
涉及大量网络交互,需要实现分布式协议。
- 分布式文件系统: 背景:专用硬件贵、数据存量巨大,要求超高吞吐;HDFS核心特点:支持海量数据存储、高容错性、弱POSIX语义、性价比高。
- 分布式对象存储系统
单机关系型数据库
通用组件:
- Query Engine:负责解析query,生成查询计划
- Txn Manager:负责事务并发管理
- Lock Manager:负责锁相关的策略
- Storage Engine: 负责组织内存/磁盘数据结构
- Replication:负责主备同步 关键的内存数据结构:B-Tree、B+-Tree、LRU List等
关键磁盘数据结构:WriteAheadLog(RedoLog)、page
单机非关系型数据库
MongoDB、Redis、Elasticsearch
非关系型数据库交互方式各不相同,数据结构千奇百怪,都在尝试SQL子集和事务。
分布式数据库
采用存储节点池化技术,动态扩缩容,可解决以下问题;
- 容量问题
- 弹性问题
- 性价比问题