这是在服务器文件系统上存储图像的好方法吗?

时间:2011-08-21 21:47:47

标签: image filesystems storage

我正在开发一个社交网站,需要找出一种简单直观的方法来将用户上传的图像存储在服务器文件系统上,随着网站的增长,这种方式可以很好地扩展。

我所做的是根据图片上传的时间戳生成路径,并使用与数据库中的记录对应的id命名文件。例如:

/server_img_path/<year>/<month>/<day>/<hour>/<minutes>/<seconds>/<milliseconds>/<img_id>.png
你怎么看?这样做有什么缺陷吗?还有更好的方法吗?谢谢你的建议。

2 个答案:

答案 0 :(得分:2)

您正在将每个文件有效地存储在它自己的目录中 - 如果它们以相同的毫秒上传,那么您在同一目录中最终会得到两个文件的唯一方法就是这样。这会给你:

  • 一堆无意义的inodes
  • 一个文件系统,当你进行维护时,它是一个导航的噩梦。

最好用破折号(-),下划线(_)或根本不分开数据。

一定要将您的文件存储在每个月的单独目录中(如果有足够的上传内容,甚至每天存储),但除非您是Facebook,否则更进一步可能毫无意义。

另外,由于您要包含图像ID,因此毫秒至少毫无意义。如果ID对应于数据库表中的主键,为什么不只是调用您的文件<id>.png并完成它?

我会建议更像这样的事情:

/server_img_path/<year>/<month>/<day>/<hour><minutes><seconds><img_id>.png

......甚至更好(也更简单)......

/server_img_path/<year>/<month>/<img_id>.png

KISS

答案 1 :(得分:1)

鉴于您有连续的ID,为什么不使用ID / 100作为文件夹名称?这样,每个文件夹总有100个文件。甚至使用ID&gt;&gt; 8(每个文件夹1024个文件)。