这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
经典案例
- 数据的持久化:校验数据的合法性 -> 修改内存 -> 写入存储介质
存储&数据库简介
存储系统
- 一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件
- 系统特点:作为后端软件的底座,性能敏感;存储系统软件架构,容易受硬件影响;存储系统代码,IO路径简单,非IO路径例如异常处理复杂。
- 层级结构:金字塔
- 数据从应用到存储介质:缓存很重要,贯穿整个存储体系;拷贝很昂贵,应该尽量减少;需要有抽象统一的接入层。
- RAID技术:R(edundant) A(rray) of I(nexpensive) D(isks)
- RAID0:多块磁盘简单组合;数据条带化存储,提高磁盘带宽;没有额外的容错设计
- RAID1:一块磁盘对应一块额外镜像盘;真实空间利用率仅50%;容错能力强
- RAID 0 + 1
数据库
- 关系型数据库:是存储系统,但在存储之外又发展出其他能力
- 结构化数据友好
- 支持事务(ACID)
- 支持复杂查询语言(SQL)
- 非关系型数据库:也是存储系统,但是一般不要求严格的结构化
- 半结构化数据友好
- 可能支持事务(ACID)
- 可能支持复杂查询语言
主流存储产品剖析
- 单机存储:单个计算机节点上的存储软件系统,一般不涉及网络交互
- 本地文件系统:Index Node(文件元数据 唯一标识),Directory Entry(内存结构)
- key-value存储:LSM-Tree
- 分布式存储:在单机存储基础上实现了分布式协议,涉及大量网络交互
- HDFS(分布式文件系统):支持海量数据存储,高容错性,弱POSIX语义,使用普通x86服务器性价比高
- 分布式存储(Ceph -- 开源分布式存储系统里的万金油):一套系统支持对象接口、块接口、文件接口,但一切皆是对象,数据写入采用主备复制模型,数据分布模型采用CRUSH算法。
- 单机关系型数据库:MySQL & PostgreSQL
- 单机非关系型数据库:MongoDB、Redis、Elasticsearch三足鼎立。交互方式各不相同,schema相对灵活。
- 分布式数据库
- 单机问题:容量、弹性、性价比
- 存储节点池化,动态扩缩容
- 使用共享存储池,不需要扩CPU