Назад | Перейти на главную страницу

оптимальная структура папок для хранения 100k файлов на USB-накопителе

Мне нужно сохранить 100k файлов (около 40 ГБ) на USB-накопителе. Каждый файл имеет уникальный идентификатор int (например, 45000).

Вариант первый - поместить все файлы в одну папку:

root/
root/1.pdf
root/2.pdf
root/3.pdf
...
root/567.pdf
root/568.pdf
root/569.pdf
...
root/10001.pdf
root/10002.pdf
root/10003.pdf
...
root/99998.pdf
root/99999.pdf
root/100000.pdf

Вариант второй заключается в создании [1-9][0-9]* иерархия папок на основе этого идентификатора:

root/
root/1/file.pdf
root/2/file.pdf
root/3/file.pdf
...
root/5/6/7/file.pdf
root/5/6/8/file.pdf
root/5/6/9/file.pdf
...
root/1/0/0/0/1/file.pdf
root/1/0/0/0/2/file.pdf
root/1/0/0/0/3/file.pdf
...
root/9/9/9/9/8/file.pdf
root/9/9/9/9/9/file.pdf
root/1/0/0/0/0/0/file.pdf

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

Обратите внимание, что это USB-накопитель на Linux, и, исходя из вышеизложенного, я также хотел бы знать, следует ли мне использовать FAT32 или NTFS.

Я бы порекомендовал ext3 / 4 для использования с Linux в качестве личного предпочтения.

Для файловой структуры я бы порекомендовал вариант номер 3 (баланс глубины каталогов и количества файлов в каталоге). Это действительно просто выбор древовидная структура данных. Чтобы добиться этого для файлов, я бы сделал хэш md5sum для каждого файла и использовал первые x символов каждого файла в качестве каталогов. Персонажи всегда будут шестнадцатеричными, поэтому каждая ветвь будет иметь ширину 16 каталогов. Выбранное количество символов будет высотой древовидной структуры.

Например:

kbrandt@alpine:~/scrap$ md5sum y.tab.h
03b01228467fbe94f8fedd9fcbb6d470  y.tab.h

Вошел бы во что-то вроде ./0/3/b/y.tab.h.

Как предварительно создать каталоги в Linux для хранения файлов? показывает, как предварительно создать каталоги.

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

Определенно рекомендуется некоторый уровень системы папок-дерева; Избегайте размещения более 10 КБ файлов в папке. Не используйте FAT, если NTFS или EXT работают.

  • Ext2: Следует использовать каталоги. Поиск файлов осуществляется путем сканирования списка записей.
  • Ext3: Вы можете выгрузить их все в корневой каталог. Структура HTree сделает доступ к ним достаточно быстрым. Я рекомендую это.
  • FAT32: Я знаю об этом меньше, но, учитывая историю ограничений на вход в каталог, я предполагаю, что он действует так же, как Ext2.
  • NTFS: Избегайте использования Linux, если вам не нужна совместимость с Windows. Использует деревья B +, что должно быть достаточно быстрым.

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

[0-99] #Directory entries
[0-99] #File entries

А ниже ...

[0-99] #Directory entries
[directory prefix][0-99] #File entries -- so in /37/76, one might find 377692 .pdf

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

Читать этот M $ paper о FAT32