我有NTFS文件夹,可能会增长到保存100,000到1,000,000文件, 在NTFS性能上讨论这个答案的上限。
我的文件具有以下特征:
1)他们有很长的文件名(通常是64到100个字符)。
2)对于许多文件,前20到40个字符的文件名的前面部分可以是相同的。
长文件名是否会影响NTFS文件夹索引性能,从名称查找文件logging,索引碎片还是索引增长?
NTFS文件夹索引是(据报道)B树。 我已经testing了我的软件到50,000个文件,但是我正在运行一个“快乐的path”testing,很less有文件系统stream失。 testing到1,000,000将需要几个星期的运行我的软件不停。
我已经考虑写一个模拟器,但是在我这样做之前,有没有人有现实世界的经验呢?
NTFS目录是内部和叶节点中的数据BTrees。 由于没有“关键字前缀压缩”,所以文件名的全文也存储在节点中。
用带有大量相同前缀字符的测试文件名来搜索这个文件只是浪费时间,因为查看目录的每个“页面”会在遇到区别字符之前进行一系列相同的比较。 如果你可以把名字中最左边的字符变成最可变的,这将是一个巨大的帮助。
但是,最后,没有文件系统是一个好的数据库,没有数据库是一个好的文件系统。 您需要考虑文件的大小和预期的使用特性。
如果内存中当前的Last Access Time
与存储在磁盘上的Last Access Time
相差超过一个小时,或者当所有内存中对该文件的引用都消失(以较近者为准),则NTFS
通常会更新磁盘上的文件属性。 因此,禁用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 。