【问题标题】:Is this a good method for storing images on the server filesystem?这是在服务器文件系统上存储图像的好方法吗?
【发布时间】:2011-08-21 21:47:46
【问题描述】:

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

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

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

你怎么看?这样做有什么缺陷吗?有没有更好的方法?感谢您的建议。

【问题讨论】:

  • 你需要这么奇怪的路径有什么原因吗?
  • 我想要一个不会在一个目录中放置太多文件/文件夹的系统,以便更均匀地分发

标签: image filesystems storage


【解决方案1】:

您将每个文件有效地存储在其自己的目录中 - 您最终会在同一目录中拥有两个文件的唯一方法是,如果它们是在同一毫秒上传的。这会给你:

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

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

请务必每月(或什至每天,如果上传的内容足够多的话)将您的文件存储在单独的目录中,但如果您是 Facebook 等,再进一步可能毫无意义。

另外,因为您包含图像 ID,所以至少毫秒是没有意义的。如果 ID 对应于数据库表中的主键,为什么不直接调用您的文件 &lt;id&gt;.png 并完成它?

我会建议更像这样的东西:

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

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

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

KISS.

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2019-09-22
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多