数据的存储 | 青训营笔记

70 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第28天。主要讲了存储系统和数据库系统以及一些主流产品,最后介绍了当前存储技术的一些发展趋势。

存储系统

存储系统 是一个提供了读写、控制类接口,能安全有效的把数据持久化的软件;

存储系统的特点:

  • 性能敏感
  • 容易受硬件影响
  • 代码既(IO路径)简单又(错误处理)复杂

存储器层级结构

如下图所示,自定向下,存储容量逐渐增加,读写速度逐渐减少。

image.png

存储链路

为了缓解存储介质读写慢的问题,需要再数据到介质之间添加缓存,缓存贯穿整个存储系统,拷贝代价很大,应该尽量减少(特别是关键路径),需要有抽象的统一接口以屏蔽底层的硬件设备。

image.png

RAID技术

该技术出现的背景:

  • 单块大容量磁盘贵

  • 单块磁盘的写入性能低

  • 单块磁盘的容错能力差

  • RAID 0:多块磁盘简单组合,数据条带化存储,提高磁盘带宽,没有容灾设计(提高性能)

  • RAID 1:一块磁盘对应一块额外镜像(提高容错)

  • RAID 0+1:多块磁盘组合且每块都有额外的镜像

数据库

数据之间是有一些关系的,为了处理数据间的关系,诞生了关系型数据库系统。

关系型数据库的特点

  • 结构化数据友好
  • 支持事务
  • 支持复杂查询语言

非关系型数据库的特点

  • 半结构化数据友好
  • 不一定支持事务
  • 不一定支持复杂查询语言

主流的存储产品

单机存储

不涉及到网络交互,分两个常见类型

  • 文件系统: 管理单元是文件,都遵循VFS的统一抽象接口,Linux文件系统的两大数据结构为Index NodeDirectory 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子集和事务。

分布式数据库

采用存储节点池化技术,动态扩缩容,可解决以下问题;

  • 容量问题
  • 弹性问题
  • 性价比问题