什么是存储系统?
一个提供读写、控制类接口,能够安全有效地将数据持久化存储的软件,作为后端软件的底座,它对性能是极度敏感的,而且存储系统的软件架构是很容易收到硬件影响。
通常存储系统的容量和读写速度是负相关的,也就是容量越大,读写速度越慢(排除persistent memory,单独了解)
数据从应用存储到存储介质中往往经历以下的流程:特别注意缓存的作用以及拷贝的减少
常见的存储系统技术:RAID(Redundant Array of Inexpenssive Disks)
就是考虑到单块高性能大容量存储介质的昂贵、读写不如多块同时读写、容错能力有限,希望通过排列组合使用多块价格低廉的低容量存储介质实现相同的存储效果。
RAID0:多块磁盘简单组合,磁盘带宽高,真实空间利用率高,但是没有容错设计
RAID1:一块磁盘对应一块镜像盘,真实空间利用率减半,但是有容错
RAID01:前两者的结合,带宽提升,同时也有容错设计,对应真实利用率还是50%
主流产品:
单机存储:单个计算机节点上的存储软件系统,一般不涉及网络交互
①单机存储--本地文件系统:Linux 中的文件系统管理单元也就是文件,文件系统的接口如 Ext2/3/4、sysinfo等等都遵循 VFS 的统一抽象接口,其中最主要的两大数据结构:
Index Node:记录文件的元数据,比如大小、权限等等,是一个文件的唯一标识也会被存在磁盘中,而且文件系统格式化时就确定了 Index Node 的总数
Directory Entry:记录文件名、inode 指针包括层级关系,也是一种内存结构
②单机存储--key-value存储:通过 put/get 存取数据,常见数据结构如 LSM-Tree(没听懂、单独了解)
分布式存储系统:在单机存储的基础上实现分布式协议,设计大量网络交互
③分布式存储--分布式文件存储系统 HDFS(了解)
④分布式存储--分布式对象存储 Ceph(了解)
数据库和存储系统的区别?
关系型数据库和非关系型数据库中的关系指的是:一种反应任意元素组成的若干有序偶对的集合,组合方式可以通过关系代数来表示,也就是对关系做运算的抽象查询语言,比如交、并、笛卡尔积等等
SQL 语言是一种方便人类阅读的关系代数表达形式,就是一种DSL(Domain Specific Language)
关系型数据库:结构化数据、支持事务、支持复杂查询语言SQL
非关系型数据库:半结构化数据、可能支持事务、可能支持复杂查询语言SQL
关系型数据库和经典存储系统的区别?
①结构化数据管理:关系型数据库以表的形式管理数据,而存储系统则是需要自行定义管理结构,和 Byte 打交道
②事务能力区别:关系型数据库支持事务的 ACID 特性,而存储系统并没有
③复杂查询能力:关系型数据库可以使用 SQL 语言简洁实现复杂查询,但是存储系统可能需要很复杂僵化的代码实现
主流产品:
单机数据库:单个计算机节点的数据库系统,保证事务在单机上执行,也可能作为分布式事务节点在网络交互
单机数据库--关系型数据库 Oracle、MySQL、PostgreSQL
单机数据库--非关系型数据库 MongoDB、Redis、Elasticsearch
分布式数据库--单机数据库无法解决的结局容量问题(存储节点池化支持动态扩缩容)、弹性问题(扩缩容之后的数据搬迁问题)、以及性价比问题(共享存储池,不必考虑磁盘的大小是否满足数据容量需求)(自行了解)
作业: