Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 28, 2019 23:30:13

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

Добрый день.
Прошу подсказать (что бы не придумывать) как обычно сохраняют большое количество файлов на диск?

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

может быть есть что то готовое на этот случай?
Спасибо.

Отредактировано ivn (Июнь 28, 2019 23:30:25)

Офлайн

#2 Июнь 28, 2019 23:56:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

Давайте начнём с того, понимаете ли вы как сохранить один файл на диск, а если понимаете, то знаете ли вы как провести эту операцию для N итераций?



Офлайн

#3 Июнь 29, 2019 00:14:22

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

ivn
может быть есть что то готовое на этот случай?
Ну надо понять что вас беспокоит в сохранении большого числа файлов. Уменьшение ресурса флешки? Повышение времени доступа к файлам?

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

Ваш пример сильно напоминает то как сохраняет данные на диске zodb Посмотрите в эту сторону. Можно сохранять данные в файлы специальной структуры. Например обычное решение упаковать множество картинок в hdf5. с ними даже некоторые просмотрщики будут работать.



Офлайн

#4 Июнь 29, 2019 16:05:11

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

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К мелких картинок
я как понимаю, надо не в одну папку писать и в кукую то структуру папок

Офлайн

#5 Июнь 29, 2019 16:08:07

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

doza_and
да, меня интересует скорость доступа
в итоге необходимо хранить картинки и потом отдавать клиенту через web сервер

Офлайн

#6 Июнь 29, 2019 16:52:42

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

> там больше 30К мелких картинок я как понимаю, надо не в одну папку писать и в кукую то структуру папок

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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Июнь 29, 2019 20:38:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск


ivn
там больше 30К мелких картинок
я как понимаю, надо не в одну папку писать и в кукую то структуру папок
А я не понимаю, объясните, почему плохо писать 30к картинок в один каталог



Офлайн

#8 Июнь 29, 2019 22:09:28

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

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

Поэтому стандартная рекомендация разбитие на попапки для хранения. Если ты посмотришь на кеш любого браузера то там оно реализовано так именно изз подобного ограничения.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 29, 2019 22:52:37)

Офлайн

#9 Июнь 30, 2019 01:44:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

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

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



Офлайн

#10 Июнь 30, 2019 19:49:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Сохранять большое количество файлов на диск

>>> писать не плохо, читать плохо. Это особенности ФС
Во первых, я спрашивал не тебя, а топикстартера, как ты наверное догадался, чтобы намекнуть товарищу, что задачу надо описывать во всей её полноте
Во-вторых, ext4 ищет файлы в B-tree



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version