众所周知,在
Windows中,当您尝试打开其中一个文件时,具有太多文件的目录将具有可怕的性能.我有一个只能在
Linux中执行的程序(目前在Debian-Lenny上,但是我不想具体说明这个发行版),并将许多文件写入同一个目录(有些作为存储库). “许多”我的意思是每天数十,这意味着一年之后,我希望有一个像5000-10000个文件的东西.它们是保留的(一旦创建了一个文件,它将永远不会被删除),并且假设硬盘具有所需的容量(如果不是,则应该升级).这些文件的大小范围很广,从几KB到几十MB(但不如此).名称始终是数字值,递增生成.
我担心长期的业绩退化,所以我问:
我担心长期的业绩退化,所以我问:
>将全部写入同一个目录可以吗?还是应该考虑为每个X文件创建一组子目录?
>我应该要求一个特定的文件系统用于这样的目录?
什么是更健壮的替代方案?专用文件系统?哪一个?
>任何其他考虑/推荐?
解决方法
它非常依赖于文件系统.
ext2和ext3每个目录的硬限制为32,000个文件.这比你所问的有点多,但是足够接近我不会冒险.此外,ext2和ext3将在每次按目录中的名称访问文件时执行线性扫描.
ext4应该解决这些问题,但我不能亲自证明这一点.
XFS是从一开始就为这种事情而设计的,即使将数百万个文件放在目录中,也可以正常工作.
所以如果你真的需要大量的文件,我会使用XFS或者ext4.
请注意,如果您有大量文件(除非使用“ls -f”),否则文件系统不会使“ls”运行得很快,因为“ls”会读取整个目录并排序名称.几万个可能不是什么大不了的事情,但一个好的设计应该超越你以前所想的一切.
对于您描述的应用程序,我可能会创建一个层次结构,因为对于某些人来说,这几乎不是任何额外的编码或精神上的努力.具体来说,您可以命名第一个文件“00/00/01”而不是“000001”.