将文件存储在目录中...有限制吗?

将文件存储在目录中...有限制吗?

我使用的是 CentOS 5 和 Plesk 9(64 位),我正在运行一个用户将上传图片的网站。使用 64 位操作系统,我可以存储的文件数量是否有限制?我只关心性能和文件服务。我不希望有 4 个目录深度的分散文件。但是,我希望在某个时候我可以有 20 万到 30 万张图片。

答案1

如果你是使用 ext3, 我发现这句话(警告:西班牙语网站)

“单个目录中的子目录数量限制为 32k(32768),这个限制可能仅出于学术目的,因为许多人甚至没有那么多文件(尽管大型邮件服务器可能需要记住这一点)。ext2 inode 规范允许单个目录中驻留超过 100 万亿个文件”

进一步阅读表明 ext3没有有 32K 的限制,可以通过以下方法进行经验证明

a=0; i=1; while [ $a == 0 ]; do touch $i; a=$?; let i++; done

但它确实有文件夹的大小限制为 32K,可以使用以下方法进行测试

a=0; i=1; while [ $a == 0 ]; do mkdir $i; a=$?; let i++; done

这种(毫无根据的)说法

ReiserFS 可以毫无问题地处理单个目录中的数十万个文件。flabdablet - 2007 年 2 月 1 日

这个问题来自姊妹网站 stackoverflow.com 的帮助也可以。

一般来说:

  • 那里目录数量限制,
  • 应该保持文件/目录小于 32K,但走得更远,
  • 您使用的文件系统确实很重要。

答案2

这在很大程度上取决于您使用的文件系统。某些旧版本的 ext3 在这方面表现糟糕,这就是 btree 的由来。Reiser 在处理大量文件时性能要好得多。以前,由于 GroupWise 的失误,我在 NetWare 服务器上有一个 Novell NSS 目录,里面有 250,000 个 4kb 文件,它工作得很好。枚举目录非常麻烦,但访问该目录中的特定文件的速度却和您希望的一样快。由于这是 8 年前的事了,我必须假设现代 Linux 文件系统可以从容应对这种情况。

答案3

这取决于您使用的文件系统,而不是操作系统的 64 位特性。对于每个文件系统,都会存在一个点,即用于搜索目录的算法的大 O 成本会胜过计算机。

如果您可以将文件层次结构分解为仅仅两 (2) 层层次结构,您将看到更好的长期可扩展性。

答案4

如果您要处理超过几百张图片,请务必考虑两件事:

  1. 带有散列文件名的嵌套层次结构;
  2. 不使用 ext3

我建议使用 XFS,或者,如果不行,就使用 ReiserFS,使用两到三层目录层次结构,以双字节对划分。例如

11/2f/112f667c786eac323e300632b5b2a78d.jpg
49/2f/49ef6eb6169cc57d95218c842d3dee5c.jpg
0a/26/0a26f9f363f1d05b94ceb14ff5f27284.jpg

这将在前几层为您提供 256 个目录,将图像拆分到总共 65535 个单独的目录中(对于 100-200k 图像及更多图像来说,这已经足够了)。这将使速度更快、更具可扩展性,并且以后的维护也更容易。

相关内容