Чтобы быстрее найти файл, я должен выполнить поиск по всем подпапкам или просто собрать их в одну папку, чем поиск? - PullRequest
0 голосов
/ 29 марта 2012

Допустим, у меня есть миллионы файлов, разделенных на подпапки в папке, и большинство из них представляют собой изображения размером ~ 250 КБ + ..

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

Дерево папок выглядит следующим образом:

      |D
   |B |
   |  |E
 A |
   |  |F
   |C |
      |G

Чтобы сделать его более понятным, скажем,

A       : is my area. 
B,C     : are my buildings on that area.
D,E,F,G : are my flats of the buildings.

и все эти квартирыможет менять положение между зданиями и с другими квартирами

      |G                |F                |E
   |B |              |B |              |B |
   |  |D             |  |G             |  |F
 A |         OR    A |         OR    A |       
   |  |E             |  |D             |  |G
   |C |              |C |              |C |
      |F                |E                |D

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

В такой позиции, как эта,Если я подожду сортировки одной папки, в которой все файлы объединены ... Будет ли это быстрее, чем поиск по многим подпапкам?

Редактировать: Сейчас я не очень много о файловых системах, но я использую win7и на моей файловой системе, обозначенной как NTFS, также есть сетевой диск с файловой системой NTFS.

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Различные файловые системы работают по-разному. Какой из них вы используете?

Исторически файловые системы имели много проблем с каталогами, содержащими множество файлов (скажем, десятки тысяч файлов или более), потому что они использовали алгоритмы O (n) для поиска в каталоге. Большинство современных файловых систем, таких как ext3, ext4 и xfs, не имеют этой проблемы.

Чтобы выяснить, какая структура будет работать лучше для вас, вам нужно либо самостоятельно сравнить различные случаи (обязательно обращая внимание на то, является ли кеш поиска имен каталогов ядра «горячим» или «холодным»), либо изучить тесты, которые уже выполнялись другими людьми. ваша конкретная файловая система.

1 голос
/ 29 марта 2012

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

Уточнение: если вам нужно искать файл в лотах в разных местах, это может быть медленнее, на самом деле.Если у вас так много файлов, самым быстрым решением было бы упростить его в вашей файловой системе: сохраните местоположение каждого файла в базе данных, которая сопоставляет каждый (с уникальным именем) «плоский» его полный путь.Таким образом, вы можете получить доступ к каждому файлу с помощью одного вызова open, и файловая система найдет его очень быстро, поскольку промежуточные подкаталоги остаются маленькими (ish).

...