问题:更好的深层文件夹结构或更少的包含数千个文件的子文件夹?
问题: 我有一个VB.NET程序,每年生成大约2500个XML文件(每个文件大约100 KB)。 我必须将文件存储在文件服务器(Windows 7或NAS)上。 在网络上有大约30台使用该程序的PC。
我正在寻找计划文件服务器上文件夹结构的最佳方法,目标是拥有良好的人类可读文件夹结构,同时快速访问文件。
过去我制作了一个类似的程序,其结构如下:
\文件服务器\ PC1 \年\月\ file00001.xml
换句话说,LAN上每台PC的文件夹 然后是这个年的子文件夹 然后是几个月的子文件夹 以及月份文件夹中当前月份生成的文件 (当然文件名有特殊标记)
通过这种方式,我每个月收到近200个文件。 这个程序运行多年没有问题。但是现在我想删除子文件夹“MONTH”,以便将当前年份PC生成的所有文件一起放在子文件夹中,如
\文件服务器\ PC1 \年\ file00001.xml
此解决方案将生成更清晰的文件夹树,但每个文件夹的文件更多。 通过vb.net程序或其他第三手应用程序访问文件,我不知道这是否会成为一个速度问题。
您会选择哪种文件夹结构?
感谢您的回复。
答案 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)
我在不同的网络条件下重复测试并获得了几乎相似的值。
我希望我没有犯任何逻辑错误,这不是一个准确的测量,但是测试完全重现了我对我的代码所做的访问:在所有情况下,深层文件夹结构似乎更快我的测试环境。