规划千个文件的文件夹结构

时间:2011-09-07 14:57:30

标签: vb.net file filesystems

问题:更好的深层文件夹结构或更少的包含数千个文件的子文件夹?

问题: 我有一个VB.NET程序,每年生成大约2500个XML文件(每个文件大约100 KB)。 我必须将文件存储在文件服务器(Windows 7或NAS)上。 在网络上有大约30台使用该程序的PC。

我正在寻找计划文件服务器上文件夹结构的最佳方法,目标是拥有良好的人类可读文件夹结构,同时快速访问文件。

过去我制作了一个类似的程序,其结构如下:

\文件服务器\ PC1 \年\月\ file00001.xml

换句话说,LAN上每台PC的文件夹 然后是这个年的子文件夹 然后是几个月的子文件夹 以及月份文件夹中当前月份生成的文件 (当然文件名有特殊标记)

通过这种方式,我每个月收到近200个文件。 这个程序运行多年没有问题。

但是现在我想删除子文件夹“MONTH”,以便将当前年份PC生成的所有文件一起放在子文件夹中,如

\文件服务器\ PC1 \年\ file00001.xml

此解决方案将生成更清晰的文件夹树,但每个文件夹的文件更多。 通过vb.net程序或其他第三手应用程序访问文件,我不知道这是否会成为一个速度问题。

您会选择哪种文件夹结构?

感谢您的回复。

2 个答案:

答案 0 :(得分:0)

如果您使用NTFS,那么测量显示平面结构比处理子目录更快,但差异很小(可能是1%甚至更少,我现在没有数字)。

更新:对于一个(单个)文件访问,涉及较少的搜索,子目录提供更好的性能。但是如果您可以随机访问您的文件,那么随着时间的推移,将会访问越来越多的文件,操作系统必须扫描所有目录并将其加载到内存中。在处理大量文件时,子目录往往变慢。同样在具有文件名索引的NTFS上,打开特定文件非常快,并且遍历子目录甚至比从同一文件夹打开文件更慢。

总结:速度显着取决于使用场景。我还相信,在我进行测试之前,将文件分组到子目录中会带来很大的好处。 NTFS在一个文件夹中的数十万个文件上表现得比预期的要好得多。因此,我建议您在特定的使用场景中进行自己的测试。

答案 1 :(得分:0)

跟进answer I accepted,我做了一些测试,以便找到自己问题的答案

我创建了一个包含3000个文件的文件夹,它模拟了扁平结构。然后我创建了一个分为12个子文件夹的文件夹,每个子文件夹有250个文件,它们模拟了深层树结构。

然后我在vb6中编写了一个简单的代码来从每个文件夹中读取100个文件并将二进制数据复制到一个数组中。文件名是随机创建的。我重复了10次循环并计算了平均时间。

这里是平面文件夹的代码。

dtTot = 0
For j = 1 To 10

   dtStart = GetTickCount

   For i = 1 To 100
     iFileNum = FreeFile
     iNr = Int(2999 * Rnd + 1)
     sFilename = sROOT & "2010\" & "raw (" & CStr(iNr) & ").dat"

     iNCount = (FileLen(sFilename) / 4
     ReDim lVetRawData(iNCount)

     Open sFilename For Binary Access Read As #iFileNum
     Get #iFileNum, , lVetRawData
     Close iFileNum

   Next i

 dtEnd = GetTickCount
 dtTot = dtTot + dtEnd - dtStart

Next j

我得到以下结果:

NTFS上的深文件夹162,5 ms

NTFS 196,9 ms上的平面文件夹

NAS上的

深文件夹280,2 ms

NAS上的

平面文件夹340,7 ms

其中NTFS服务器是Windows 2003 Pentium机器,NAS是Synology DS210j(基于linux)

我在不同的网络条件下重复测试并获得了几乎相似的值。

我希望我没有犯任何逻辑错误,这不是一个准确的测量,但是测试完全重现了我对我的代码所做的访问:在所有情况下,深层文件夹结构似乎更快我的测试环境。

相关问题