2

我正在为 Web 应用程序(在 unix/linux 上运行)进行文件上传。我想知道如果我计划为每个文件上传创建一个新目录是否会有问题?这是 Ruby on Rails 插件“回形针”的开箱即用方法。我讨论了权衡是什么,或者如果在 linux/unix 环境上部署,是否可能只是一个问题。

选项似乎是:

  1. 每个文件附件一个文件夹 - 根据回形针开箱即用的方式
  2. 每个用户可能有一个文件夹(即,如果 Web 服务有多个用户拥有自己的帐户) - 然后需要为文件名添加一些唯一性(可能是模型 ID)
  3. 将所有附件放在一个文件夹中 - 但这可能太过分了

问题 - 我应该关心正在创建的目录数量吗?如果服务很受欢迎,这对 O/S 来说是个问题吗?对于允许拥有自己单独帐户的用户上传文件的网站的任何建议,对于存储它们而言,哪种结构可能是好的?(我想我已经忽略了在 mysql 中存储文件的概念。)

谢谢

4

3 回答 3

5

假设 Linux 下的 Ext3 格式化驱动器(最常见)。

来自(http://en.wikipedia.org/wiki/Ext3

“每个目录有 31998 个子目录的限制,这是由于每个 inode 有 32000 个链接的限制。[13]”

因此,如果您达到了 32k 上传的限制(不是那么高),您的应用程序将会失败。

于 2009-10-01T16:41:14.550 回答
0

如果您对创建新文件/目录的目录有一个单独的分区,我会说这不是问题。如果您只使用另一个分区,则可能会出现问题,因为您可能会用完 inode 和/或可用磁盘空间,这可能会很糟糕。

使用单独的分区(在 DOS 攻击的情况下)只会阻止您的应用程序正常工作,并且系统不会受到任何伤害。

于 2009-10-01T11:24:38.680 回答
0

不是这样,但不建议在一个目录(或文件相同)中拥有大量文件夹(这对速度来说是一个真正的打击)。

原因:c风格的字符串

一个好的解决方案是分层(原文如此?)存储以下内容:/path/to/usernamefirstletter/username/year/month/file

于 2009-10-01T11:26:04.653 回答