Алексей Ярков: Или выводить, или делать остальное бледным, или ярко выделять, как жирным маркером строку, не трогая остальной текст. Любое подойдёт. Я бы сам попробовал бы написать, только не знаю, может ли js или css выделить строку текста в клиенте.
alpy: да, делал замеры скорости, после указанного куска кода вставил exit() чтобы дальше не выполнялось. Читаю по 2000 файлов, потом обрабатываю, потом в bd добавляю одним запросом. Смотрю в resource monitor скорость чтения. Мелкие файлы, скорее всего, разбросаны по диску и фрагментированы, поэтому получается random reed, а не sequential read. Думаю пока над тем, чтобы объединить все файлы в один большой, например в базу данных и читать уже из большого файла. Хотя, всё равно затраты на чтение останутся, больше возни. Нужно было сразу в БД писать, когда с интернета скачивал. Не подумал заранее. Ещё заметил, что новый драйвер на материнку снизил скорость диска почти в 2 раза. Сменил на более старый, стало 99 МБ в секунду sequential read. Ну а при команде "copy /-Y d:\data\* >null" resource monitor показывает от 10 МБ и выше. А вот этот код на Питоне не поднимается выше 3 МБ.
Про меньшее количество файлов в папке я уже думал, но всё равно есть затраты по времени на их размещение, кроме того, физическое размещение файлов не изменится.
Думаю, попробовать ещё мапить файлы в память, может это быстрее. Или переписать всё на C# попробовать, для разнообразия.
asd111: Да, но у меня несколько десятков папок по 10 ГБ в каждой, в каждой папке - 100 000 файлов, размером по 100КБ каждый. Чтение скриптом файлов в список - это та же самая загрузка в ОЗУ, РАМ-диск. Мне нужно прогонять файлы через кеш и обрабатывать их, парсить. Но скорость чтения с диска не достигает максимальной.
на ноуте 4 ГБ памяти, под RAM диск можно выделить 1ГБ максимум. Это то же самое, что прочитать файлы в память, ведь эти файлы всё равно нужно переписать RAM диск.
что, если при скачке сайта сразу писать страницы в БД blobами ? Поднимется скорость чтения? Файл будет большой, расположенный на соседних дорожках, ведь так?
nirvimel: И верно, проверил количество собранной в список для коммита инфы, из четырёх скриптов два собрали 0 байт, хотя копии идентичны, отличаются лишь смещением данных. Переделал, теперь получше
pygame: ну так у меня одномоментно же один процесс пишет, разве нет? База открылась, запись произвелась и закрылась. Ладно, возможно, она не генерирует никаких ошибок, просто молчит, но не пишет, тогда, как мне собирать инфу порциями и отсылать её тому процессу, который пишет? В очередь ему, например, ставить?
angru: Спасибо. Я ещё пробовал на RAM-диск загнать, конечно, гораздо быстрее получается, но файлов у меня 10 ГБ, а RAM-диск всего 1ГБ, если он будет быстро обрабатываться, то его снова нужно будет наполнять, то на то и выйдет. А насчёт многопоточности - не пойму пока, как это на python будет выглядеть. А то я просто несколько скриптов запускаю, а база получается меньше, когда несколько скриптов, чем когда одним обрабатывается. И ошибки никакие не возникают, просто инфа не пишется.
angru: Уверен, я специально разделил скачивание данных из интернета и их обработку. Сначала скачал, потом обрабатываю. Конечно, я пока не уверен, что из этого быстрее, получить файл из интернета или считать из локального файла, но когда уже вся информация скачана, как-то удобнее работать в оффлайне. Нужно провести тест, скачать данные без сохранения на диск и измерить время. Правда, с сохранением скачка 100 000 страниц в 30 потоков выполняется полчаса, явно, без сброса на диск будет меньше. Вот только обработку в 30 потоков я пока не научился делать, вот поэтому и спрашиваю.
Philipp T: Что посоветуете? Redis, Mongo, Memcached? Если база не будет вмещаться в оперативной памяти, всё равно операции с диском будут всю производительность съедать?
я ещё не очень разобрался с индексами. Пока я не наполню базу и не буду из неё данные выбирать, мне же не нужны пока индексы? У меня там есть поле, которое по идее должно содержать уникальное значение, но в процессе наполнения записи могут дублироваться и потом, при удалении, чувствую, вылезут проблемы с индексами. К тому же, в sqlite есть скрытое поле rowid, которое якобы (я так понял) является индексом.
К другим базам я потом перейду, сначала бы эту хотелось бы наполнить, а потом сравнивать производительность с остальными базами.
Дмитрий: немного запутался. При чём тут БД? Я имею ввиду, что за сервис предоставляет свои IP для выполнения таких заданий? Как он называется? Дальше я уже почитаю мануалы. Мне нужно не список прокси использовать, чтобы качать через них, а назначать задания удалённым сервисам, которые скачают сайт для меня куда-то на указанный адрес. Вот и вопрос, как называются такие сервисы, где и как их можно получить.