Влияет ли длина имени файла на огромные индексы папок NTFS?

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

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

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

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

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

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

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

2 ответа

Решение

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

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

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

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.

Другие вопросы по тегам