我会按用户存储图像。但是,鉴于您可能有很多用户,它可能不是那么简单。
用户文件上传就是:用户特定的文件上传。当您管理这些文件时,您通常需要为每个用户应用各种程序。例如:1)删除用户帐户并删除所有相关文件,2)计算用户使用的空间量,3)列出用户上传的所有文件等。
如果您将这些文件分散在不同的目录中,则很难有效地实施上述过程。
您指定您可能拥有超过 100.000 个用户。根据您的文件系统是什么,您最终可能会因此而遇到麻烦。例如,在 ext3 中,每个目录最多有 32K 个子目录,这对于在每个用户的目录中组织文件可能是个问题(请参阅:我可以在一个目录中放入多少文件?)。
假设我们不能在一个目录中存储超过 32K 的文件或目录,那么您需要找到一种解决此限制的方法。例如,您可以根据用户名中的第一个字母将用户文件夹分成几个子目录(并为所有其他起始字符添加一个额外的子目录):
users
a
aaron
...
b
bertie
...
...
misc
_foobar
...
@jack
...
100000/25=4000
现在每个目录只有大概的用户,在给定的 32K 之下。
跳出框框思考,将图像作为文件存储在平面文件系统中可能不是正确的选择。有专门为存储和处理大量文件而创建的数据库系统。以MongoDB 的 GridFS 为例。它非常高效,可以扩展到大量文件,还可以处理所有较低级别的问题,例如正确的文件系统使用。在 MS SQL 中有FILESTREAM Storage,它特别擅长将文件存储在 NTFS 文件系统上。