Найти - Пользователи
Полная версия: Сохранять большое количество файлов на диск
Начало » Python для новичков » Сохранять большое количество файлов на диск
1 2 3
ivn
Добрый день.
Прошу подсказать (что бы не придумывать) как обычно сохраняют большое количество файлов на диск?

например мой файл называется вот так:
f789abc898d6892df98d09a8f8.jpg
как понимаю, что нужно сохранить вот так:
/f7/89/f789abc898d6892df98d09a8f8.jpg

может быть есть что то готовое на этот случай?
Спасибо.
FishHook
Давайте начнём с того, понимаете ли вы как сохранить один файл на диск, а если понимаете, то знаете ли вы как провести эту операцию для N итераций?
doza_and
ivn
может быть есть что то готовое на этот случай?
Ну надо понять что вас беспокоит в сохранении большого числа файлов. Уменьшение ресурса флешки? Повышение времени доступа к файлам?

Общее решение при сохранении большого числа файлов это не сохранять большого числа файлов. Воспользуйтесь базой данных, все в один файл и запишется.

Ваш пример сильно напоминает то как сохраняет данные на диске zodb Посмотрите в эту сторону. Можно сохранять данные в файлы специальной структуры. Например обычное решение упаковать множество картинок в hdf5. с ними даже некоторые просмотрщики будут работать.
ivn
FishHook
Давайте начнём с того, понимаете ли вы как сохранить один файл на диск, а если понимаете, то знаете ли вы как провести эту операцию для N итераций?
есть вот такой код:
 hash_image = m.hexdigest()
image_name = hash_image + '.jpg'
with open(os.path.join(app.config['UPLOAD_FOLDER'], image_name), 'wb') as f:
    f.write(response_image_content)
там больше 30К мелких картинок
я как понимаю, надо не в одну папку писать и в кукую то структуру папок
ivn
doza_and
да, меня интересует скорость доступа
в итоге необходимо хранить картинки и потом отдавать клиенту через web сервер
Rodegast
> там больше 30К мелких картинок я как понимаю, надо не в одну папку писать и в кукую то структуру папок

Ты правильно понимаешь. Тебе нужно создать каталог с произвольным названием (например 1, 2, 3, …) и записать туда 1000 файлов, после чего создать другой каталог и записать в него вторую 1000 файлов и т.д. Ну а что бы ты знал где какой файл находится нужно ещё создать индексный файл и записывать в него в какой каталог какой файл ты сохранил.
FishHook

ivn
там больше 30К мелких картинок
я как понимаю, надо не в одну папку писать и в кукую то структуру папок
А я не понимаю, объясните, почему плохо писать 30к картинок в один каталог
PEHDOM
FishHook
А я не понимаю, объясните, почему плохо писать 30к картинок в один каталог
писать не плохо, читать плохо. Это особенности ФС , при достаточно большом колличестве файлов в папке, производительнос ФС падает даже на чтение. Это связано с особеностями работы поиска файла на диске драйвером ФС. Драйвер не знает точно где храниться тот или иной файл на диске физически, и например для открытия файла из папки он перебирает все файлы в папке пока (не)найдет нужный. Когда их over КK он каждый раз перебирает over КK инод чтобы найти нужный файл, что не может не сказаться на производительности. Конечно же это все упрощенно и утрировано, у каждой ФС свои тараканы, там используться разные алгоритмы для оптимизации и ускорения поиска, но помогает это ровно до какогото определенного количества, а потом, все равно начинаеться замедление работы. Сейчас считается такое количество равным порядка 10К. по крайней мере для наболее распрострянненых NTFS и extfs.
Для reiserfs или xfs это колличество может быть больше, так как они как раз заточены под такие задачи.

Поэтому стандартная рекомендация разбитие на попапки для хранения. Если ты посмотришь на кеш любого браузера то там оно реализовано так именно изз подобного ограничения.
py.user.next
ivn
Прошу подсказать (что бы не придумывать) как обычно сохраняют большое количество файлов на диск?
например мой файл называется вот так:
Вот надо подумать, что делать с одноимёнными файлами. Как бы они не назывались, простыми именами или хешами, одинаковые имена начнут указывать на одни и те же файлы в этой структуре директорий и файлов.

Если у тебя десять тысяч файлов с именем file.txt, которые различаются по тексту, а может и не различаются даже, то нужно придумать, как их сохранить все и чтобы к любому был доступ как к уникальному.
FishHook
>>> писать не плохо, читать плохо. Это особенности ФС
Во первых, я спрашивал не тебя, а топикстартера, как ты наверное догадался, чтобы намекнуть товарищу, что задачу надо описывать во всей её полноте
Во-вторых, ext4 ищет файлы в B-tree
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB