存储的本质|青训营笔记

79 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第6天

存储系统

什么是存储系统

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。

存储系统的特点

  • 作为后端软件的底座,性能敏感;
  • 存储系统软件架构,容易受硬件影响;
  • 存储系统代码,既简单又复杂;

层级结构

存储层次是在计算机体系结构存储系统层次结构的排列顺序。每一层于下一层相比都拥有较高的速度和较低延迟性,以及较小的容量(也有少量例外,如AMD早期的Duron CPU)。大部分现今的中央处理器的速度都非常的快。大部分程序工作量需要存储器访问。由于高速缓存的效率和存储器传输位于层次结构中的不同等级,所以实际上会限制处理的速度,导致中央处理器花费大量的时间等待存储器I/O完成工作。

大部分电脑中的存储层次如下四层:

  1. 寄存器–可能是最快的访问。在32位处理器,每个寄存器就是32位。x86处理器共有16个寄存器。

  2. 高速缓存(L1-L3:SRAM、L4:DRAM

    1. 第一级高速缓存(L1)–通常访问只需要几个周期,通常是几十个KB。
    2. 第二级高速缓存(L2)–比L1约有2到10倍较高延迟性,通常是几百个KB或更多。
    3. 第三级高速缓存(L3)–比L2更高的延迟性,通常有数MB之大。
    4. 第四级高速缓存(L4)(不一定有)–CPU外部的DRAM,但速度较主存高。
  3. 主存DRAM)–访问需要几百个周期,可以大到数十GB。

  4. 磁盘存储–需要成千上万个周期,容量非常大。

数据库

定义

关系 = 集合 = 任意元素组成的若干有序偶对

反映了事物之间的关系

关系代数 = 对关系作运算的抽象查询语言

SQL = 一种DSL(Domain Specific Language) = 方便人类阅读的关系代数表达形式

非关系型数据库也是存储系统,但是一般不要求严格的序列化

分类

非关系型数据库

Elasticsearch,MongoDB,Redis三足鼎立

Elasticsearch面向文档存储,可序列化成json形式,支持嵌套。

MongoDB:面向文档存储,文档可形式化json/bson,4.0后开始支持事务。

redis:最广发最普及,使用c语言实现,单线程+I/O复用,性能很好,数据结构丰富。

分布式数据库

单机数据库向分布式数据库发展的原因:

容量:单机容量有限,受硬件限制->节点存储池,动态扩缩容。

弹性:实现cpu和内存根据需要进行弹性的扩大和缩小。

性价比:相对单机系统更高,可以有效地组织廉价的服务器。