存储与数据库 | 青训营笔记

71 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
本文主要是存储系统与数据库系统一些定义及特点的介绍。

存储系统概览

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件

存储系统的层级结构

90.jpeg

上图展示的是数据怎样从应用到存储介质的,包含以下几个特点:
缓存很重要,贯穿整个存储系统
拷贝很昂贵,应该尽量减少
硬件设备五花八门,需要有抽象统一的接入层

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交互