一、MD5 算法
1. 概念
MD5 是一种哈希算法(也叫散列算法),核心作用是把任意长度的输入数据(如字符串、文件、二进制流),通过特定计算规则,生成一个固定 128 位(16 字节)的哈希值(通常以 32 位十六进制字符串形式展示)。
我们可以用一个通俗的比喻理解:
- 就算是把一篇 1 万字的文章(任意长度输入)交给 MD5'机器',它也会输出一个固定长度的'指纹'(32 位十六进制字符串);
- 哪怕只改文章里的一个标点,输出的'指纹'也会完全不同;
- 但你无法通过这个'指纹'反推出原来的文章内容。
2. 核心特性
- 固定长度输出:无论输入是 1KB 的文件还是 1GB 的视频,MD5 结果都是 32 位十六进制字符串(如
e10adc3949ba59abbe56e057f20f883e); - 雪崩效应:输入的微小变化(哪怕 1 个字符),会导致输出的哈希值完全不同;
- 不可逆性:无法从 MD5 哈希值反推原始数据(这也是它早期用于密码加密的核心原因);
- 易计算:对任意输入,能快速算出对应的 MD5 值。
3. 适用场景
1)文件完整性校验 在下载软件或者安装包时,官网一般会提供一个该文件的 MD5 值,我们下载后计算文件 MD5 值,如果一致,则表示文件未被篡改,无传输错误;如果不一致,那么文件可能被篡改或者下载错误。
2)数据唯一标识 在 MinIO/文件存储场景中,常用 MD5 算法给文件命名:
- 避免文件名重复,(如果用户上传的是同名图片,可以用 MD5 作为唯一 Key 存储)
- 可以快速判断文件是否存在,(计算新文件的 MD5,如果存储中已有,则无需重复存储)
二、传统文件存储方式与改进
以前的做法是:专门开一台集中式文件服务器,里边存文件,用 Tomcat 对外访问。 现在的做法是:使用 MinIO 存储对象,数据库存路径,是分布式对象存储。
1. MinIO 分布式对象存储的概念
MinIO 是分布式对象存储系统,专门用于存储海量的非结构化的数据(图片,视频,文档,日志文件等)。
传统文件服务器是类似于单间仓库,仓库坏了就都没了,但是 MinIO 的关键在于分布式模式,这种是多间联网的仓库集群,文件会被拆分到多间仓库,即使一间坏了,数据也可以从其他仓库恢复,且多间仓库可同时对外提供服务,效率高。
2. 两者区别与比较
| 维度 | 传统文件服务器(Tomcat + 集中式服务器) | MinIO 分布式对象存储 |
|---|---|---|
| 存储架构 | 集中式:所有文件存在单台服务器的本地磁盘 | 分布式:数据分散存储在多台服务器节点,支持集群部署 |
| 高可用性 | 极低:服务器宕机 / 磁盘损坏,所有文件不可用 / 丢失 | 极高:多副本备份(可配置 1-16 副本),部分节点故障不影响数据访问,支持自动恢复 |
| 扩展性 | 差:扩容需更换更大磁盘 / 服务器,停机维护 | 好:线性扩容,直接添加新节点即可,无需停机,存储容量随节点数增长 |
| 并发性能 | 低:单台服务器的 CPU / 网卡 / 磁盘 IO 是瓶颈,高并发下易卡顿 | 高:集群节点并行处理请求,分摊压力,支持海量并发读写 |
| 数据管理 | 依赖操作系统文件系统(如 NTFS/Ext4),手动管理文件夹 / 权限,易出现文件重名、路径混乱 | 基于对象存储模型,自带权限控制、版本管理、元数据管理,可通过 API 统一管控 |

