在USB驱动器上存储100k文件的最佳文件夹结构

我需要将100k文件(大约40GB)存储在USB驱动器中。 每个文件都有一个唯一的int id(例如45000)。

选项一是将所有文件放在一个文件夹中:

root/ root/1.pdf root/2.pdf root/3.pdf ... root/567.pdf root/568.pdf root/569.pdf ... root/10001.pdf root/10002.pdf root/10003.pdf ... root/99998.pdf root/99999.pdf root/100000.pdf 

选项二是根据该ID创build一个[1-9][0-9]*文件夹层次结构:

 root/ root/1/file.pdf root/2/file.pdf root/3/file.pdf ... root/5/6/7/file.pdf root/5/6/8/file.pdf root/5/6/9/file.pdf ... root/1/0/0/0/1/file.pdf root/1/0/0/0/2/file.pdf root/1/0/0/0/3/file.pdf ... root/9/9/9/9/8/file.pdf root/9/9/9/9/9/file.pdf root/1/0/0/0/0/0/file.pdf 

哪个选项可以更好地扩展? 我可以理解,第二个选项将需要吨文件夹,但每个文件夹将至多包含10个文件夹和1个文件。 维护不会是一个问题,因为一切都将由应用程序控制。

请注意,这是一个Linux上的USB驱动器,基于上述我也想知道我是否应该与FAT32或NTFS。

我会推荐使用ext3 / 4作为我个人的偏好。

对于文件结构,我会推荐选项号码3(目录深度和每个目录文件的平衡)。 这实际上只是select树数据结构 。 为了实现这个文件,我会做每个文件的md5sum散列,并使用每个文件的前x个字符作为目录。 字符将始终是hex的字符,因此每个分支将16个目录宽。 您select的字符数将是树结构的高度。

例如:

 kbrandt@alpine:~/scrap$ md5sum y.tab.h 03b01228467fbe94f8fedd9fcbb6d470 y.tab.h 

会去像./0/3/b/y.tab.h这样的东西。

如何在Linux上预先创build文件存储目录? 向您展示如何预先创build目录。

这是一个通用的解决scheme,适用于很多用例,并且应该创build一个相当不错的文件分发。

一定级别的文件夹树系统肯定是推荐的; 避免每个文件夹放置超过10K个文件。 如果NTFS或EXT将工作,不要使用FAT。

  • Ext2:应该使用目录。 通过扫描条目列表来查找文件。
  • Ext3:你可以把它们都转储到根目录下。 HTree结构将使访问速度相当快。 我推荐这个。
  • FAT32:我对这个知之甚less,但考虑到目录input限制的历史,我认为它的行为很像Ext2。
  • NTFS:除非您需要与Windows兼容,否则请避免使用Linux。 使用B +树,这应该是相当快的。

在使用目录结构的情况下,我会把100-200个文件放在目录中。 所以,在顶层,也许是这样的:

 [0-99] #Directory entries [0-99] #File entries 

在那之下

 [0-99] #Directory entries [directory prefix][0-99] #File entries -- so in /37/76, one might find 377692 .pdf 

FAT随着磁盘上文件数量的增加而减慢,而不是每个目录,所以你不应该有任何差异。

阅读这个关于FAT32的M $文件