Влияет ли длина имени файла на огромные индексы папок NTFS? - PullRequest
5 голосов
/ 19 февраля 2012

У меня есть папки NTFS, в которых может храниться от 100 000 до 1 000 000 файлов. Верхний предел обсуждается в этом ответе по производительности NTFS .

Мои файлы имеют следующие характеристики:

1) Они имеют длинные имена файлов (обычно от 64 до 100 символов).

2) Для многих файлов ведущаячасть имен файлов может быть идентичной для первых 20-40 символов.

Влияет ли длинное имя файла на производительность индекса NTFS-папки при поиске записи файла по его имени, фрагментации индекса или приростеиндекса?

Индексы папок NTFS являются (как сообщается) B-деревьями.Я протестировал свое программное обеспечение на 50000 файлов, но я выполняю тест «счастливого пути», с небольшим оттоком файловой системы.Тестирование до 1000000 займет недели безостановочного запуска моего программного обеспечения.

Я подумал о написании симулятора, но до того, как я это сделаю, кто-нибудь имеет реальный опыт с этим?

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

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 голос
/ 15 ноября 2012

NTFS каталоги - это BTrees с данными как во внутренних, так и в конечных узлах.Поскольку никакого «сжатия префикса ключа» не существует, полный текст файла также сохраняется в узлах.

Поиск этого по тестовым именам файлов, которые имеют много одинаковых префиксных символов, просто тратит время, так как просмотр каждой «страницы» каталога делает кучу идентичных сравнений, прежде чем встретить отличительные символы.Если вы можете сделать самый левый символ в имени самой переменной, это будет огромной помощью.

Но, в конце концов, ни одна файловая система не является хорошей базой данных, и никакая база данных не является хорошей файловой системой.Вы должны учитывать размеры ваших файлов и ожидаемые характеристики использования.

...