我有NTFS文件夹,可能会增长到100,000到1,000,000个文件,这是answer on NTFS performance中讨论的上限。
我的文件具有以下特征:
1)它们有长文件名(通常为64到100个字符)。
2)对于许多文件,文件名的前导部分对于前20到40个字符可以是相同的。
长文件名是否影响NTFS文件夹索引性能,从名称中查找文件的记录,索引的碎片或索引的增长?
NTFS文件夹索引(据报道)是B树。我已经测试了我的软件到50,000个文件,但我正在运行一个“快乐路径”测试,几乎没有文件系统流失。测试到1,000,000将需要几周的时间来不间断地运行我的软件。
我考虑过编写一个模拟器,但在此之前,有没有人有这方面的实际经验?
答案 0 :(得分:2)
NTFS
通常会更新磁盘上文件的属性,如果内存中的当前Last Access Time
与磁盘上存储的Last Access Time
相差一个多小时,或者所有内存引用都是该文件已经消失,以较新的为准。 因此,禁用Last Access Time
会提高文件夹和文件访问速度。
将具有长文件名的文件保存到NTFS
驱动器时,NTFS
默认情况下会创建第二个文件目录条目,其短文件名符合8.3约定。
当NTFS
枚举目录中的文件时,它必须查找与长文件名关联的8.3名称。由于NTFS
目录是以排序状态维护的,因此目录列表中相应的长文件名和8.3名通常不会彼此相邻。因此,NTFS
对每个存在的文件使用目录的线性搜索。因此,执行目录列表所需的时间会随着目录中平方的文件数而增加。 禁用8.3文件创建也将提高性能。
需要更改两个注册表项:NtfsDisable8dot3NameCreation
和NtfsDisableLastAccessUpdate
,将其值设置为1.
而且,如果您负担得起,请使用固态硬盘(SSD)代替传统硬盘,因为性能要好得多,请参阅此处http://en.wikipedia.org/wiki/Solid-state_drive#Comparison_of_SSD_with_hard_disk_drives。
答案 1 :(得分:1)
NTFS目录与内部和叶子节点中的数据都是BTree。由于没有任何“密钥前缀压缩”,文件名的全文也存储在节点中。
使用具有大量相同前缀字符的测试文件名进行搜索只会浪费时间,因为查看目录的每个“页面”会在遇到区别字符之前进行大量相同的比较。如果你可以让名字中最左边的字符变量最大,那将是一个巨大的帮助。
但是,最后,没有文件系统是一个好的数据库,没有数据库是一个好的文件系统。您需要考虑文件的大小和预期的使用特征。