文件名的长度会影响巨大的NTFS文件夹索引吗



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

我的文件具有以下特征:

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

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

长文件名是否会影响NTFS文件夹索引的性能,无论是从文件名、索引碎片还是索引增长来查找文件记录?

NTFS文件夹索引(据报道)是B树。我已经对50000个文件测试了我的软件,但我正在运行一个"快乐路径"测试,文件系统几乎没有变化。测试到1000000将需要数周不间断地运行我的软件。

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

NTFS通常会在内存中的当前Last Access Time与磁盘上存储的Last Access Time相差超过一个小时时,或者在内存中对该文件的所有引用都消失时(以最近的为准),更新磁盘上文件的属性<因此,禁用Last Access Time可以提高文件夹和文件访问的速度>

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

需要更改两个注册表项:NtfsDisable8dot3NameCreationNtfsDisableLastAccessUpdate,将它们的值设置为1。

而且,如果你负担得起,可以使用固态硬盘(SSD),而不是传统的硬盘,因为它的性能要好得多,请参阅此处http://en.wikipedia.org/wiki/Solid-state_drive#Comparison_of_SSD_with_hard_disk_drives.

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

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

但是,最终,没有一个文件系统是好的数据库,也没有一个数据库是好的文件系统。您需要考虑文件的大小和预期的使用特性。

最新更新