这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
本文主要是存储系统与数据库系统一些定义及特点的介绍。
存储系统概览
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件
存储系统的层级结构
上图展示的是数据怎样从应用到存储介质的,包含以下几个特点:
缓存很重要,贯穿整个存储系统
拷贝很昂贵,应该尽量减少
硬件设备五花八门,需要有抽象统一的接入层
RAID技术(redundant array of inexpensive disks)
背景:
单块大容量磁盘价格>多块小容量磁盘价格
单块磁盘写入性能<多块磁盘并发写入性能
单块磁盘容错能力有限,不够安全
| RIAD 0 | 多块磁盘简单组合;数据条带化存储,提高磁盘带宽;没有额外的容错限制 |
| -------- | -------------------------------------- |
| RIAD 1 | 一块磁盘对应一块额外的镜像盘;真实空间利用率仅50%;容错能力强 |
| RIAD 0+1 | 结合了RAID0和RAID 1;真实空间利用率50%;容错能力强,写入带宽好
常见的文件存储系统
单机存储系统
| 技术特点 | |
|---|---|
| 本地文件存储系统 | 文件系统的管理单元:文件;文件系统虽多,但遵循VFS的统一抽象接口;Linux文件系统两大数据结构:Index Node&Directory Entry |
| key-value存储 | 常见使用方式:put(k,v)&get(k);常见的数据结构:LSM-Tree,某种程度上牺牲了读性能、追求写入性能 |
分布式存储系统
| 特点 | |
|---|---|
| Ceph开源分布式存储系统 | 数据写入采用主备份模式;数据分布模型采用CRUSH算法 |
数据库系统概览
数据库系统是由数据库及数据库管理软件组成的系统,包括关系型数据库和非关系型数据库。
-
关系型数据库特点
- 结构化数据友好
- 支持事务
- 支持复杂的查询语言
-
非关系型数据库特点
- 半结构化数据优化
- 可能支持事务
- 可能支持复杂查询语言
数据库 vs 经典存储
-
数据库实施结构化数据管理,在关系型数据库,数据以表的形式管理;经典存储,需要自行定义管理结构
-
数据库支持事务,事务优点包括:
- Atomicity:要么全做、要么不做
- Consistency:执行前后,数据状态一致
- Isolation:隔离多个并发事务,避免影响
- Durability:事务一旦提交成功,数据保证持久性
-
进行数据查询时,数据库的语言简单;经典存储的语言复杂、僵化(需要自定义管理结构)
常见数据库
关系型数据库
| 特点 | |
|---|---|
| MySQL | |
| PostgreSQL | 关键内存数据结构:B Tree,B+Tree,LRU List;关键磁盘数据结构:WriteAheadLog,Page |
| Oracle | 商用 |
非关系型数据库(相较于关系型数据库的SQL交互,非关系型数据库的交互方式各不相同)
| 特点 | |
|---|---|
| Elasticssearch | 面向文档存储;实现了大量的搜索数据结构&算法 |
| MongoDB | 面向文档存储;4.0后开始支持事务 |
| Redis | 数据结构丰富;C语言实现、超高性能;主要基于内存,但支持AOF/RDB持久化;常用redis-cli/多语言SDK交互 |