我从来没有真正理解将图像存储为数据库中的二进制 blob 的炒作。请记住,您的文件系统是为存储二进制 blob(称为文件)而设计的数据库。
这个问题提供了对该主题的很多见解。我建议大家阅读它及其答案。
就个人而言,我一直将图像存储在文件系统中(毕竟图像就是文件!),并且只在数据库中存储运行时生成 URL 所需的信息。
我见过的一种方案是使用图像的 MD5 作为其文件名,并将该 MD5 与图像 ID 一起存储在数据库中。然后您可以将 MD5 十六进制数字分解为几个组件以构建目录结构。这限制了单个目录中的文件数量。
例如,图像的 MD5 可能为d41d8cd98f00b204e9800998ecf8427e
. 它在数据库中的条目如下所示:
id | md5 | upload_date | ...
----------------------------------------------------------
42 | d41d8cd98f00b204e9800998ecf8427e | 2013-04-01 | ...
此文件可能存储在images/d4/1d8/cd98f00b204e9800998ecf8427e.jpg
. 您放置路径分隔符的位置以及您拥有的路径分隔符的数量决定了目录数和每个目录中的文件数之间的平衡。