我的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文件创建也将提高性能
需要更改两个注册表项:NtfsDisable8dot3NameCreation
和NtfsDisableLastAccessUpdate
,将它们的值设置为1。
而且,如果你负担得起,可以使用固态硬盘(SSD),而不是传统的硬盘,因为它的性能要好得多,请参阅此处http://en.wikipedia.org/wiki/Solid-state_drive#Comparison_of_SSD_with_hard_disk_drives.
NTFS目录是B树,内部节点和叶节点中都有数据。由于没有任何"密钥前缀压缩",文件名的全文也存储在节点中。
使用具有大量相同前缀字符的测试文件名进行搜索只会浪费时间,因为在遇到区别字符之前,浏览目录的每个"页面"都会进行一系列相同的比较。如果你能让名称中最左边的字符成为变量最多的字符,那将是一个巨大的帮助。
但是,最终,没有一个文件系统是好的数据库,也没有一个数据库是好的文件系统。您需要考虑文件的大小和预期的使用特性。