Мне нужно сохранить 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 работают.
В случаях, когда вы используете структуру каталогов, я бы поместил в каталог 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