Голям брой итерации

dakata__92

Super Moderator
Имам да извъртя огромен брой итерации 53 655 000. Да кажем, че съм ги разделил нааа 147 части по 365 000 итерации всяка. Примерно ще ги извъртя на порции по 365 000 за няколко дни, но проблема е че ще отнеме ааадски много време да получавам респонд от сървър. Ще ползвам cURL да взимам инфото но се чудя дали няма и друг по-бърз начин да извъртя итерациите!? :)
 
Догадки и заключения:
имаш сървър, който върти итерации
ти си клиент, който иска да вземе резултата от итерациите на сървъра.

Проблемът ти е, че сървърът ще върти твърде дълго, а клиента ще трябва да чака много за всеки request (от по 356 000 итерации, примерно)

Тива ли е общата картинка?
 
Най-просто казано ще правя заявки към сайт и той ще ми връща отговор. Няма как да забързам времето за отговор, просто се чудех дали от моя страна мога да намеря по-бърз от cURL варянт за сваляне.
 
dakata__92 каза:
Най-просто казано ще правя заявки към сайт и той ще ми връща отговор. Няма как да забързам времето за отговор, просто се чудех дали от моя страна мога да намеря по-бърз от cURL варянт за сваляне.
Ахаа.... защото аз си представях, че можеш да записваш резултата във файл, а отделно наведнъж да пунеш една заявка за получения файл.
Значи не можеш да накараш сървъра да записва във файл?
 
anonimen каза:
dakata__92 каза:
Най-просто казано ще правя заявки към сайт и той ще ми връща отговор. Няма как да забързам времето за отговор, просто се чудех дали от моя страна мога да намеря по-бърз от cURL варянт за сваляне.
Ахаа.... защото аз си представях, че можеш да записваш резултата във файл, а отделно наведнъж да пунеш една заявка за получения файл.
Значи не можеш да накараш сървъра да записва във файл?

Как така да записва във файл. На моят комп ще записвам инфото във файлове, така и ще чета нещата на порции от по 365 000 итерации на цикъл. Днес прочитам 2 файла по 365 000 което е 730 000 итерации и приключвам. Проблема е, че мен ме бави сървъра който връща изключително бавно отговор.
 
dakata__92 каза:
anonimen каза:
dakata__92 каза:
Най-просто казано ще правя заявки към сайт и той ще ми връща отговор. Няма как да забързам времето за отговор, просто се чудех дали от моя страна мога да намеря по-бърз от cURL варянт за сваляне.
Ахаа.... защото аз си представях, че можеш да записваш резултата във файл, а отделно наведнъж да пунеш една заявка за получения файл.
Значи не можеш да накараш сървъра да записва във файл?

Как така да записва във файл. На моят комп ще записвам инфото във файлове, така и ще чета нещата на порции от по 365 000 итерации на цикъл. Днес прочитам 2 файла по 365 000 което е 730 000 итерации и приключвам. Проблема е, че мен ме бави сървъра който връща изключително бавно отговор.
Парсването не става така - хоп и за ден си свалил цялата уикипедия.
 
uphero каза:
dakata__92 каза:
anonimen каза:
Ахаа.... защото аз си представях, че можеш да записваш резултата във файл, а отделно наведнъж да пунеш една заявка за получения файл.
Значи не можеш да накараш сървъра да записва във файл?

Как така да записва във файл. На моят комп ще записвам инфото във файлове, така и ще чета нещата на порции от по 365 000 итерации на цикъл. Днес прочитам 2 файла по 365 000 което е 730 000 итерации и приключвам. Проблема е, че мен ме бави сървъра който връща изключително бавно отговор.
Парсването не става така - хоп и за ден си свалил цялата уикипедия.

Значи свеждам итерациите до възможно най-малък брой след което ще ползвам cURL. file_get_contents е доста по-бавен от къстъм код. И все пак 365 000 ако мога да ги извъртя за ден става доста интересно. Вчера 4 часа процесора на лаптопа работеше на 95% за да генерира файловете с по 365 000 запитвания. Така спестих това време в моментното итериране. Викам файла с функция file за да върне всеки ред като масив и направо обхождам всеки ред от масива и пращам заявката с чакане за отговор и записване във файл.
 
Такива операции принципно се извъшват на заден план, за предпочитане с опашки (queue).

PHP има стандартен клас за опашки (http://php.net/manual/en/class.splqueue.php), но той може да не ти свърши работа с такова количество заявки.

По-добрия вариант е RabbitMQ: http://www.rabbitmq.com/getstarted.html

Принципът е прост:

1. Имаш скрипт (task.php), който изпраща съобщения (прим. id-та или URL-та) в опашка.
2. Имаш скрипт (worker.php), който чете от опашката и прави заявката към сайта с някакъв delay. Ако заявката е изпълнена успешно, махаш съобщението от опашката и продължаваш със следващото.
3. Ако искаш можеш да пуснеш worker.php по няколко пъти за да обработиш съобщенията в опашката по-бързо.
 
Май съм се захванал с мисия невъзможна... :o :o :o
Респонд от базата ми е средно 2,5 секунди * 365 000 итерации =
912500 секунди или около 10 дни за сваляне. Ако сметнем, че ми трябват 147 такива файла да мина по 10 дни на всеки = 1 470 дни. Ммммда щеее си почакам да стане. :D С тези прости сметки установих, чеее няма да стане скоро това. Трябва да включа още машини и то ако са 14 машините деля дните или се получават 105 дни с тях. Твъъъърде твърде много отново. Дали с CronJob мога да разпределя задачите на различни сървъри и да ускоря времето за обработка? 147 задачи ако задам на различни акаунти по 15 дни да ги сложа по-се ядва, но не ми се вярва да мога на безплатни сървъри да пусна процес за 15 дни.
 
dakata__92 каза:
Май съм се захванал с мисия невъзможна... :o :o :o
Респонд от базата ми е средно 2,5 секунди * 365 000 итерации =
912500 секунди или около 10 дни за сваляне. Ако сметнем, че ми трябват 147 такива файла да мина по 10 дни на всеки = 1 470 дни. Ммммда щеее си почакам да стане. :D С тези прости сметки установих, чеее няма да стане скоро това. Трябва да включа още машини и то ако са 14 машините деля дните или се получават 105 дни с тях. Твъъъърде твърде много отново. Дали с CronJob мога да разпределя задачите на различни сървъри и да ускоря времето за обработка? 147 задачи ако задам на различни акаунти по 15 дни да ги сложа по-се ядва, но не ми се вярва да мога на безплатни сървъри да пусна процес за 15 дни.
Кронове му е майката,
пускаш 10, 20 крона или колкото има сили сървъра и им разпределящ задачите.
Ако трябва си дигаш един уеб сървър на пс-то и така.
 
uphero каза:
dakata__92 каза:
Май съм се захванал с мисия невъзможна... :o :o :o
Респонд от базата ми е средно 2,5 секунди * 365 000 итерации =
912500 секунди или около 10 дни за сваляне. Ако сметнем, че ми трябват 147 такива файла да мина по 10 дни на всеки = 1 470 дни. Ммммда щеее си почакам да стане. :D С тези прости сметки установих, чеее няма да стане скоро това. Трябва да включа още машини и то ако са 14 машините деля дните или се получават 105 дни с тях. Твъъъърде твърде много отново. Дали с CronJob мога да разпределя задачите на различни сървъри и да ускоря времето за обработка? 147 задачи ако задам на различни акаунти по 15 дни да ги сложа по-се ядва, но не ми се вярва да мога на безплатни сървъри да пусна процес за 15 дни.
Кронове му е майката,
пускаш 10, 20 крона или колкото има сили сървъра и им разпределящ задачите.
Ако трябва си дигаш един уеб сървър на пс-то и така.
Кронове но как да ги настроя? Трябва ми да ги пусна само веднъж да си върти циклите на сървъра. Не ми се вярва да може 15 дни да си върти задачата на сървъра без да я прекратят.
 
dakata__92 каза:
uphero каза:
dakata__92 каза:
Май съм се захванал с мисия невъзможна... :o :o :o
Респонд от базата ми е средно 2,5 секунди * 365 000 итерации =
912500 секунди или около 10 дни за сваляне. Ако сметнем, че ми трябват 147 такива файла да мина по 10 дни на всеки = 1 470 дни. Ммммда щеее си почакам да стане. :D С тези прости сметки установих, чеее няма да стане скоро това. Трябва да включа още машини и то ако са 14 машините деля дните или се получават 105 дни с тях. Твъъъърде твърде много отново. Дали с CronJob мога да разпределя задачите на различни сървъри и да ускоря времето за обработка? 147 задачи ако задам на различни акаунти по 15 дни да ги сложа по-се ядва, но не ми се вярва да мога на безплатни сървъри да пусна процес за 15 дни.
Кронове му е майката,
пускаш 10, 20 крона или колкото има сили сървъра и им разпределящ задачите.
Ако трябва си дигаш един уеб сървър на пс-то и така.
Кронове но как да ги настроя? Трябва ми да ги пусна само веднъж да си върти циклите на сървъра. Не ми се вярва да може 15 дни да си върти задачата на сървъра без да я прекратят.
Тия 365 000 ги раздели, защо ще ги пускаше наведнъж ?!?
 
Защото имам 365 000 * 147 = 53 655 000 общо итерации. Общо 147 файла всеки с по 365 000 итерации. По-на дребно мога да ги разделя но в момента са групирани по определено условие. Ако ги надребна още тези файлове става в пъти по-зле логистически да се оправя с информацията която ще получавам после. Утежнява се в пъти кода за обработка. Един файл трябва да генерира друг по получените резултати файл. Нямам признак по който да разделя файловете. Мога да ги деля примерно на 2 и да се получават по 182500 итерации но тогава файловете от 147 скачат на 294. Няма къде да ги пусна да въртят. Аз 147 незнам как ще ги пусна да се въртят та камоли 294. Иска ми се много да се получат нещата но уви няма да се получи защото ще отнеме аааадски много време (месеци). :( :o :o :o
 
Fakeheal каза:
А защо не ги пуснеш едновременно?
Едновременно но къде? И как да ги пусна. Лаптопа го гася а това ще има седмици да върти и да чака отговор.
 
dakata__92 каза:
Fakeheal каза:
А защо не ги пуснеш едновременно?
Едновременно но къде? И как да ги пусна. Лаптопа го гася а това ще има седмици да върти и да чака отговор.

По принцип каквото и да правиш "във външния интернет свят", никога не го правиш от твоя компютър (за предпочитане). Особено под уиндоус. :)

Така че виж някой хостинг, Amazon web services е супер идея.
 
Само не разбрах към какъв сървър и към кой сървър ще пращаш заявки.
Няма как да забързаш нещо, което сървъра не може да обработи по-бързо, освен ако не е твой сървъра и не оптимизираш това, което трябва.

И сигурен ли си, че няма да сметнат заявките като DDoS атака?

По принцип всеки сървър си има конкуретни връзки. Стандартно са зададени на 20, но ако сървъра има голямо потребление, би трябвало да е вдигнат.
За това можеш да пробваш да пуснеш 10(може и повече, зависи сървъра дали ще може да ги одържа) отделни цикъла едновременно.

Доста неподробно описани са последните теми във форума.
 

Back
Горе