Windows 文件名的长度是否会影响巨大的NTFS文件夹索引?

Windows 文件名的长度是否会影响巨大的NTFS文件夹索引?,windows,performance,filesystems,ntfs,Windows,Performance,Filesystems,Ntfs,我的NTFS文件夹可能会增长到容纳100000到1000000个文件,这是本文讨论的上限 我的文件具有以下特征: 1) 它们有很长的文件名(通常为64到100个字符) 2) 对于许多文件,前20到40个字符的文件名的前导部分可以相同 长文件名是否会影响NTFS文件夹索引性能,从文件名查找文件记录、索引碎片或索引增长 NTFS文件夹索引是(据说)B树。我已经用50000个文件测试了我的软件,但我正在运行一个“快乐路径”测试,几乎没有文件系统的波动。测试1000000将花费数周的时间不间断地运行我的

我的NTFS文件夹可能会增长到容纳100000到1000000个文件,这是本文讨论的上限

我的文件具有以下特征:

1) 它们有很长的文件名(通常为64到100个字符)

2) 对于许多文件,前20到40个字符的文件名的前导部分可以相同

长文件名是否会影响NTFS文件夹索引性能,从文件名查找文件记录、索引碎片或索引增长

NTFS文件夹索引是(据说)B树。我已经用50000个文件测试了我的软件,但我正在运行一个“快乐路径”测试,几乎没有文件系统的波动。测试1000000将花费数周的时间不间断地运行我的软件


我曾考虑过编写一个模拟器,但在我这么做之前,有没有人有过这方面的实际经验?

NTFS
通常会更新磁盘上文件的属性,如果内存中当前的
上次访问时间与磁盘上存储的
上次访问时间相差一个多小时,或者当对该文件的所有内存引用都消失时,以较新的为准。因此,禁用上次访问时间可以提高文件夹和文件的访问速度

当您将具有长文件名的文件保存到
NTFS
驱动器时,
NTFS
默认情况下会创建第二个具有符合8.3约定的短文件名的文件目录条目。 当
NTFS
枚举目录中的文件时,它必须查找与长文件名关联的8.3名称。由于
NTFS
目录保持在已排序状态,因此相应的长文件名和8.3名称在目录列表中通常不相邻。因此,
NTFS
对存在的每个文件使用目录的线性搜索。因此,执行目录列表所需的时间随着目录中文件数的平方而增加。禁用8.3文件创建也将提高性能

需要更改两个注册表项:
NtfsDisable8dot3NameCreation
NtfsDisableLastAccessUpdate
,将其值设置为1


而且,如果您负担得起,请使用固态硬盘(SSD)而不是传统硬盘,因为性能在数量级上更好,请参见此处。

NTFS目录是包含内部和叶节点数据的B树。由于没有任何“密钥前缀压缩”,文件名的全文也存储在节点中

使用具有许多相同前缀字符的测试文件名搜索此文件只会浪费时间,因为查看目录的每个“页面”会在遇到区别字符之前进行一系列相同的比较。如果你能使名字中最左边的字符成为变量最多的字符,那将是一个巨大的帮助


但是,归根结底,没有一个文件系统是好的数据库,也没有一个数据库是好的文件系统。你需要考虑文件的大小和预期的使用特性。

为什么你认为测试到百万需要几个星期?您可以创建对一百万个文件执行预期操作的合成测试,编写测试比运行测试需要更多的时间。我不认为64到100个字符的文件名是长文件名,无论如何。从本文来看,如果启用了旧版8.3文件名支持,性能可能会受到影响。@EugeneMayevski'EldoSCorp-我问这个问题的目的是避免编写模拟器。我需要测试碎片和膨胀,系统的复杂性使得合成长期的系统行为不是那么容易。