Планирование структуры папок для тысяч файлов - PullRequest
1 голос
/ 07 сентября 2011

Вопрос: лучше глубокая структура папок или меньше подпапок с тысячами файлов?

Проблема: У меня есть программа VB.NET, которая генерирует около 2500 XML-файлов в год (около 100 КБ на файл). Я должен хранить файлы на файловом сервере (Windows 7 или NAS). В сети около 30 компьютеров, использующих эту программу.

Я ищу лучший способ спланировать структуру папок на файловом сервере, чтобы иметь хорошую структуру, удобную для восприятия человеком, и в то же время быстрый доступ к файлу.

В прошлом я делал аналогичную программу со следующей структурой:

\ файловый_сервер \ PC1 \ год \ месяцев \ file00001.xml

другими словами, папка для каждого ПК в локальной сети тогда подпапка на годы тогда подпапка за месяцы и в папке месяца файлы, созданные в текущем месяце (конечно, в имени файла есть специальный штамп)

таким образом я получал почти 200 файлов в месяц. Эта программа работает годами без проблем.

Но теперь я хотел бы удалить подпапку «МЕСЯЦ», чтобы все файлы, сгенерированные ПК в текущем году, были объединены в год подпапки как

\ файловый_сервер \ PC1 \ год \ file00001.xml

это решение даст более четкое дерево папок, но больше файлов в папке. Я не знаю, может ли это быть проблемой с точки зрения скорости доступа к файлу с помощью программ vb.net или другого стороннего приложения.

Какую структуру папок вы бы выбрали?

Спасибо за ответ.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

Следуя ответу , который я принял , я провел некоторый тест, чтобы найти ответ на свой вопрос

Я создал папку с 3000 файлами, она имитирует плоскую структуру,Затем я создал папку, разделенную на 12 подпапок, в каждой по 250 файлов, они имитировали глубокую древовидную структуру.

Затем я написал в vb6 простой код для чтения 100 файлов из каждой папки и копирования двоичных данных вмассив.Имя файла было создано случайно.Я повторил цикл 10 раз и вычислил среднее время.

Вот код для плоской папки.

dtTot = 0
For j = 1 To 10

   dtStart = GetTickCount

   For i = 1 To 100
     iFileNum = FreeFile
     iNr = Int(2999 * Rnd + 1)
     sFilename = sROOT & "2010\" & "raw (" & CStr(iNr) & ").dat"

     iNCount = (FileLen(sFilename) / 4
     ReDim lVetRawData(iNCount)

     Open sFilename For Binary Access Read As #iFileNum
     Get #iFileNum, , lVetRawData
     Close iFileNum

   Next i

 dtEnd = GetTickCount
 dtTot = dtTot + dtEnd - dtStart

Next j

Я получаю следующий результат:

глубокая папка включенаNTFS 162,5 мс

плоская папка в NTFS 196,9 мс

глубокая папка на NAS 280,2 мс

плоская папка на NAS 340,7 мс

, где NTFS-сервер - это компьютер с Windows 2003 Pentium, а NAS - Synology DS210j (на основе linux)

Я повторил тест в различных сетевых условиях и получил почти одинаковое значение.

Надеюсь, я не допустил логической ошибки, и это не точное измерение, но тест воспроизводит именно тот тип доступа, который я имею к своему коду: во всех случаях глубокая структура папок оказывается быстрее в моей тестовой среде.

0 голосов
/ 07 сентября 2011

Если вы используете NTFS, то измерения показывают, что плоская структура будет работать быстрее, чем работа с подкаталогами, но разница минимальна (возможно, 1% или даже меньше, у меня сейчас нет цифр).

Обновление: для доступа к одному (одному) файлу требуется меньше запросов, а подкаталоги обеспечивают более высокую производительность. Но если у вас есть произвольный доступ к вашим файлам, то со временем будет доступно все больше и больше файлов, и ОС придется сканировать все каталоги и загружать их в память. Когда дело доходит до обработки большого количества файлов, подкаталоги, как правило, становятся медленнее. Также в NTFS, которая имеет индекс имен файлов, открытие определенного файла происходит довольно быстро, а обход по подкаталогам может быть даже медленнее, чем открытие файла из той же папки.

Подводя итог: скорость существенно зависит от сценария использования. Я также считал, что группировка файлов в подкаталоги принесет значительные преимущества, пока я не проведу тесты. NTFS показала намного лучшие результаты для сотен тысяч файлов в одной папке, чем можно было ожидать. Поэтому я бы порекомендовал сделать свои собственные тесты в вашем конкретном сценарии использования.

...