前言
前几天,我们的leader对我说:小陈,你负责这个存储管理的模块。根据我们的业务需要我开始狂补了存储方面的基础知识,下文我将通俗易懂的总结一下什么是块存储、文件存储和对象存储。
块存储
定义:
将存储设备划分为固定大小的"块",通过直接操作地址读写数据,没有文件系统层级,由用户端自行管理逻辑结构。说人话就是:所有以裸磁盘的形式直接提供给主机或者服务器的存储就是块存储。
特点:
- 高性能:直接访问物理磁盘,延迟极低,适合高IOPS场景。
- 灵活控制:可自由分区、格式化。
- 无元数据:仅存储原始数据块,无额外描述信息。
适用场景:
- 需要高性能、低延迟的场景(数据库、虚拟机硬盘)
- 单主机独占访问的场景(比如MySQL数据库独享一块存储)
优缺点:
优点:
- 读写速度快,适合高频交易、实时数据处理。
- 支持裸设备访问,适合数据库(如Oracle、MySQL)。
- 多路径冗余,保障高可用性。
缺点:
- 扩展性受限,跨节点共享复杂(如需依赖SAN或集群文件系统)。
- 无内置文件结构,需自行管理数据逻辑。
文件存储
定义:
基于文件系统管理数据,通过目录层级和文件名组织文件,支持多用户共享和权限控制。我的简单理解就是在裸磁盘的基础上面在封装一层文件系统。
特点:
- 结构化访问:树状目录结构,符合用户直觉。
- 协议兼容性:支持POSIX标准,适配通用应用。
- 元数据有限:仅记录文件名、权限等基础信息。
适用场景:
- 企业文件共享(NAS)。
- 我们在开发最常用的代码仓库就是基于文件存储的。
优缺点:
优点
- 易用性强,适合协作办公和共享存储。
- 支持并发访问(如团队编辑同一文档)。
- 容量扩展相对简单(横向扩展NAS)。
缺点
- 海量文件时目录检索效率下降。
- 跨地域共享延迟高。
- 元数据处理能力弱,难以支持智能分析。
对象存储
定义:
将数据封装为“对象”(Object),每个对象包含数据、唯一标识符(如UUID)和丰富的自定义元数据,通过RESTful API(如S3)访问,无目录层级,采用扁平化存储结构。
特点:
- 无限扩展:设计面向EB级数据,天然支持分布式架构。
- 元数据驱动:可附加标签(如拍摄时间、地理位置),支持高级检索。
- 不可变性:对象一旦写入,通常仅支持覆盖而非局部修改。
适用场景:
- 云存储服务(AWS S3、阿里云OSS)。
- 备份归档、日志存储。
- 图片、音视频等富媒体资源库。
优缺点:
优点
- 高容错性(多副本/纠删码)。
- 成本低,适合冷数据存储。
- 跨平台兼容性强(云原生应用首选)。
缺点
- 高延迟,不适合实时交互。
- 不支持文件锁定或随机写入(如数据库日志)。
- 协议非POSIX,需适配SDK或网关。
总结:
维度 | 块存储 | 文件存储 | 对象存储 |
---|---|---|---|
数据结构 | 原始块(无结构) | 目录树(文件/文件夹) | 扁平化对象(唯一ID + 元数据) |
访问方式 | 块设备接口(SCSI/iSCSI) | 文件协议(NFS/SMB) | RESTful API(HTTP/HTTPS) |
性能 | 极高(微秒级延迟) | 中等(毫秒级延迟) | 较低(百毫秒级延迟) |
扩展性 | 有限(依赖硬件) | 中等(横向扩展NAS) | 无限(分布式架构) |
成本 | 高(高性能硬件) | 中等 | 低(弹性扩展) |
典型应用 | 数据库、虚拟机 | 企业共享、多媒体编辑 | 云存储、大数据分析 |