Улучшить работу с большим количеством файлов при скачивании

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

Улучшить работу с большим количеством файлов при скачивании

#1 Сообщение kotobod » 31 июл 2014, 11:53

Думаю, многие уже заметили, как при добавлении в скачивание папки с большим количеством файлом (в основном мелких), например библиотеки с книгами или музыкальный архив, когда количество файлов превышает несколько тысяч, а то и десятки тысяч в списке для скачивания, то fly просто виснет. Повторные запуски не надолго его оживляют после убивания процесса, но стоит например открыть список скачиваемых файлов, то проблема повторяется вновь. Иногда, после долгих раздумий, список файлов очереди для скачивания все-таки все-таки открывается, но стоит только в нем что-то удалить, то получаем опять фриз. Очень древняя проблема и помню ее на протяжении всех лет пользования FlyLink. Может как-то можно это дело оптимизировать? И да, еще частенько после такого накрывается медным тазом база sqlite, об ошибке который Fly постоянно начинает сигнализировать. Приходится тупо ее убивать в папке и заново все шарить и хешировать. В итоге, мне так ни разу и не удалось скачать какую-нибудь библиотеку через Fly.
kotobod
Осилил регистрацию
Осилил регистрацию
 
Сообщений: 1
Зарегистрирован: 31 июл 2014, 11:36
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия флая: r502

Re: Улучшить работу с большим количеством файлов при скачива

#2 Сообщение parihaaraka » 05 апр 2015, 17:09

+100500
Мало того, что тормоза в большим количеством файлов, так их еще и хрен удалишь - всё зависает намертво, а хард начинает сходить с ума.
Автору пора раскурить паттерны разработки с использованием СУБД, и, в идеале, сделать работу с БД только с использованием какой-нибудь
древней версии ansi стандарта через ODBC, чтобы желающие могли подсунуть свою субд (например, Postgresql) и админить ее.
parihaaraka
Осилил регистрацию
Осилил регистрацию
 
Сообщений: 5
Зарегистрирован: 05 апр 2015, 16:53
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия флая: r5

Re: Улучшить работу с большим количеством файлов при скачива

#3 Сообщение pavel.pimenov » 06 апр 2015, 06:38

Запустите флай с ключем трассировки start FlylinkDC_x64.exe /sqltrace
и после пришлите созданный файл лога sqltrace.log для анализа
хочется увидеть какой запрос там тормозит
~PPA() {} //
pavel.pimenov
Глава проекта
Глава проекта
 
Сообщений: 130
Зарегистрирован: 17 мар 2011, 11:36
Откуда: Караганда, Липецк
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Версия флая: svn-build

Re: Улучшить работу с большим количеством файлов при скачива

#4 Сообщение parihaaraka » 23 апр 2015, 23:23

Моделировать это снова не хочется, пока сижу на eiskaltdc++. Дело почти 100% не в субд, и именно об этом речь (несколько десятков тысяч записей в базе - ерунда).
Да, выступаю сейчас с несколько абстрактной позиции, могу быть не прав, прошу прощения заранее. Но таки что может делать программа долго, очень долго.. реально долго для того, чтобы очистить _полностью все задачи_(минут сорок ждал, не дождался)? Активных закачек, пускай, десяток. Значит, видимо, получается delete from download_queue where tth not in ('1','2','3',..'10'), а дальше подчистить мусор от незавершенных заданий (или наоборот - не суть вопроса). Но как этой простой процедурой можно нагнуть компьютер целиком и надолго? Можно сделать предположение. После первых недоуменных прибиваний процесса была попытка удалять небольшими порциями - папочками по несколько десятков файлов. И эффект наблюдался пропорциональный, т.е. такая папочка удалялась из очереди с минуту. Напрашивается вывод: либо кошмарные запросы к базе (вряд ли) без нужных индексов, либо каждое удаление файла ведет к перестройке всего дерева даже невидимых файлов, и дальше лавинообразно рефрешится куча чего-то (может и база обновляется для каждого файла, что в сумме и дает такую скорость - вариантов множество).. По крайней мере, даже если устранить эту, очевидно, архитектурную проблему в разумные сроки невозможно, стоило бы сделать временное простое решение по прибиванию ВСЕХ задач целиком, чтобы можно было хоть как-то выкрутиться. Наверняка, это несложно.
parihaaraka
Осилил регистрацию
Осилил регистрацию
 
Сообщений: 5
Зарегистрирован: 05 апр 2015, 16:53
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия флая: r5

Re: Улучшить работу с большим количеством файлов при скачива

#5 Сообщение pavel.pimenov » 24 апр 2015, 06:09

Добавить функцию "удалить все закачки" можно - сегодня вечером попробую приделать.
хотя очень хотелось бы локализовать вашу проблему
если 40 минут то там где-то дедлок и виновата никак не база
~PPA() {} //
pavel.pimenov
Глава проекта
Глава проекта
 
Сообщений: 130
Зарегистрирован: 17 мар 2011, 11:36
Откуда: Караганда, Липецк
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Версия флая: svn-build

Re: Улучшить работу с большим количеством файлов при скачива

#6 Сообщение parihaaraka » 24 апр 2015, 17:58

Дедлок предполагает взаимное _ожидание_ двух потоков или процессов, пока каждый не освободит ресурс, занятый другим. А в данном случае программа не ждет - винчестер трещит как сумасшедший. Я бы даже дал программе поработать столько, сколько нужно, чтобы очистить очередь, но побоялся, что хард дырку протрет :)
parihaaraka
Осилил регистрацию
Осилил регистрацию
 
Сообщений: 5
Зарегистрирован: 05 апр 2015, 16:53
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия флая: r5

Re: Улучшить работу с большим количеством файлов при скачива

#7 Сообщение pavel.pimenov » 24 апр 2015, 18:07

нужно было в последний момент снять дамп памяти и прислать мне - я бы тогда посмотрел где висит
просто очень странно что 40 минут
скажите какие вы хоть каталоги качали и у кого?
я повторю у себя эксперимент
~PPA() {} //
pavel.pimenov
Глава проекта
Глава проекта
 
Сообщений: 130
Зарегистрирован: 17 мар 2011, 11:36
Откуда: Караганда, Липецк
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Версия флая: svn-build

Re: Улучшить работу с большим количеством файлов при скачива

#8 Сообщение parihaaraka » 24 апр 2015, 18:23

Ткнул на скачивание папки, не вдаваясь в детали (обои на рабочий стол или типа того), а внутри оказалась страшная куча файлов в подкаталогах (да и самих подкаталогов уровня 3-4 немало). А дальше, как в первом посте этой темы, на каждое движение - несколько секунд пауза. Удаление уже описал. А детали - что и у кого - остались в анналах истории.
parihaaraka
Осилил регистрацию
Осилил регистрацию
 
Сообщений: 5
Зарегистрирован: 05 апр 2015, 16:53
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия флая: r5

Re: Улучшить работу с большим количеством файлов при скачива

#9 Сообщение pavel.pimenov » 24 апр 2015, 18:24

число файло сколько? 10 100 тыс?
~PPA() {} //
pavel.pimenov
Глава проекта
Глава проекта
 
Сообщений: 130
Зарегистрирован: 17 мар 2011, 11:36
Откуда: Караганда, Липецк
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Версия флая: svn-build

Re: Улучшить работу с большим количеством файлов при скачива

#10 Сообщение parihaaraka » 24 апр 2015, 18:34

Если бы я знал, что Вы, Павел, настолько доступны и активны, я бы не поленился собрать побольше информации об инциденте, может даже отладить бы сам попытался. Теперь-то уж детали не скажу. Наверное, 1-2 десятка тысяч от силы. Файлы в большинстве своем оказались мелкие - порядка 100кб.
parihaaraka
Осилил регистрацию
Осилил регистрацию
 
Сообщений: 5
Зарегистрирован: 05 апр 2015, 16:53
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия флая: r5

Re: Улучшить работу с большим количеством файлов при скачива

#11 Сообщение pavel.pimenov » 24 апр 2015, 18:43

Я когда-то тестировал проблему с большим кол-во каталогов и файлов но в плане хеширования были жалобы
и кто-то мне даже подарил вот такие батники
https://yadi.sk/d/_Vaf05sYgDk7o
они генерят много файлов и каталогов для теста
я попробую их использовать для эмуляции большой очереди закачек
~PPA() {} //
pavel.pimenov
Глава проекта
Глава проекта
 
Сообщений: 130
Зарегистрирован: 17 мар 2011, 11:36
Откуда: Караганда, Липецк
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Версия флая: svn-build

Re: Улучшить работу с большим количеством файлов при скачива

#12 Сообщение pavel.pimenov » 27 апр 2015, 20:33

с билда 18547 добавил функцию быстрого удаление всей очереди - доступно через меню контекстное в очереди
обновите бетку чарез часок - сможете проверить
~PPA() {} //
pavel.pimenov
Глава проекта
Глава проекта
 
Сообщений: 130
Зарегистрирован: 17 мар 2011, 11:36
Откуда: Караганда, Липецк
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Версия флая: svn-build


Вернуться в Хотелки

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2