У нас есть сотни тысяч изображений в формате jpg в подобной структуре папок Windows, но очень сложно взаимодействовать и быстро работать с ними (перечисление занимает время, копирование требует времени и т. Д.). Вот структура:
images/
1/
10001/
10001-a.jpg
10001-b.jpg
...
10001-j.jpg (10 images in each XXXXX folder)
10002/
10003/
...
19999/
2/
20001/
20002/
20003/
...
29999/
3/
4/
5/
6/
7/
8/
9/
Теперь просмотр этих изображений немного медленный, потому что есть ок. 10 000 папок в каждой папке X, и их перечисление просто требует времени.
Есть ли лучший способ организовать изображения с меньшим количеством подпапок / элементов? Повлияет ли изменение структуры на это?
images/
1/
0/
0/
0/
0/
1/
2/
3/
4/
5/
6/
7/
8/
9/
10000/ (image folder, same as path)
10000-a.jpg
10000-b.jpg
...
10000-j.jpg (10 images in each image folder)
1/
2/
3/
4/
5/
6/
7/
8/
9/
1/
2/
3/
4/
5/
6/
7/
8/
9/
1/
2/
3/
4/
5/
6/
7/
8/
9/
2/
3/
4/
5/
6/
7/
8/
9/
Таким образом, расположение изображения 48617-c.jpg будет равно пути 4/8/6/1/7/48617/48617-c.jpg.
Причина наличия отдельной папки с полным номером пути 48617 заключается в том, чтобы упростить копирование всего пакета из 10 изображений (путем копирования всей папки).
Теперь ... ни в одной папке не будет более 11 непосредственных подпапок, но будет много дополнительных однозначных папок для целей разделения. Ускоряет ли эта настройка просмотр и взаимодействие, когда несколько пользователей добавляют / копируют / удаляют / и т. Д. Изображения?
Windows немного особенная, когда дело доходит до компоновки папок с тысячами файлов. Особенно изображения, поскольку Windows Explorer обращается с ними по-особенному. Тем не менее, есть несколько правил, которым нужно следовать, чтобы не допустить слишком из рук:
Предостережения:
В моем ответе есть много полезной информации по математике. Как сложность каталога влияет на i-узлы?
С учетом сказанного, разные файловые системы по-разному обрабатывают большое количество файлов в каталогах. Некоторые устраивают 10 000 записей, другие прыгают. Как быстро изобретенное эмпирическое правило, 1000, вероятно, является хорошим целевым пределом, если у вас есть контроль над дизайном. Записи в каталоге обычно хранятся как своего рода список, и приложение для чтения должно отсортировать их порядок. Например, ls
в мире Unix считывает вещи в память в порядке каталогов, а затем распечатывает их в алфавитном порядке.
Взгляните на математику из другого вопроса. Также подумайте, что sysadmin1338 сказал об ином поведении Explorer. Explorer создаст эскизы всего, что распознает как изображение, а затем прочитает эскизы, чтобы отобразить их. Это слишком много операций ввода-вывода для просмотра каталога, забитого файлами.
В зависимости от того, есть ли у вас ресурсы для разработки такой системы, это звучит как хороший кандидат для базы данных SQL Server, использующей FILESTREAM хранилище для файлов. Таким образом, вы оставляете организацию каталогов SQL Server, и все, о чем вам нужно беспокоиться, это как управлять самими данными. Вероятно, вы могли бы использовать SQL Express, поскольку данные FILESTREAM не учитываются при расчете размера базы данных.