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

Revelation каза:
Само не разбрах към какъв сървър и към кой сървър ще пращаш заявки.
Няма как да забързаш нещо, което сървъра не може да обработи по-бързо, освен ако не е твой сървъра и не оптимизираш това, което трябва.

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

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

Доста неподробно описани са последните теми във форума.
Нормално, пича се заниамва с гейм, спам боитове, парсване и събиране на никому ненужна информация и тн.
Как очакваш да опише точно какво ще прави.
 
Там е проблема на темите, които се отварят. Като не са ясни всички фактори, които могат да причинят проблема, няма как да дадеш добър и конкретен отговор за решаване на конкретния проблем.
 
uphero каза:
Revelation каза:
Само не разбрах към какъв сървър и към кой сървър ще пращаш заявки.
Няма как да забързаш нещо, което сървъра не може да обработи по-бързо, освен ако не е твой сървъра и не оптимизираш това, което трябва.

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

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

Доста неподробно описани са последните теми във форума.
Нормално, пича се заниамва с гейм, спам боитове, парсване и събиране на никому ненужна информация и тн.
Как очакваш да опише точно какво ще прави.

Как установи, че информацията е ненужна? Не се занимавам само с това, което си описал. :D

Revelation:
Обясних, че от моя страна ще оптимизирам нещата, защото не мога да оптомизирам времето за отговор на сървъра. От къде какво взимам не е от значение, темата е за итерациите. Много от отговорите ми бяха изключително полезни, не знам защо се казва, че не ми се дават конкретни и правилни отговори. Сметнах времето за отговор 2,5 секунди средно с microtime. Това прави, че 365 000 * 2,5 = 912 500 секунди на един файл. Предложи ми се да ги разделя всичките 147 файла с по 365000 итерации всеки и общо за всички 147 * 365000 = 53 655 000. Та предложи ми се да ги разделя на по-малки порции, но мога само да ги деля на две за файл и после поредността трябва да е спазена защото файловете следват зависимости. Проблема е, че ако овелича броят на файловете пропорционално за да намаля броя на итерациите във даден файл, ще трябва да пусна двойно по-голям брой файлове да се въртят. От 147 на 294 за да падне броят на итерациите във файл от 365 000 на 182 500 за да намаля времето за отговор и решаване на файла. Хубаво, но идва следният проблем, че пак ще трябва да извъртя всичките 298 файла, но няма къде да ги кача. С AWS не се справих да си подкарам регистрация там. Иска ми всякакви лични данни за да се регистрирам. Как ли пък не ще си давам адреса името и прочие на някакви известно непознати за мен :D :D :D
 
http://php.net/manual/en/function.curl-multi-exec.php
като цяло php не е удобен за тази цел, избери си език с нишки. И по възможност да не минава през веб сървъра - пусни го през CLI.
С горното може малко да "забързаш" процеса, но като цяло ако пропадне някъде трябва да си осигуриш механизъм да не почваш всеки път от начало.
Поздрави.
 
imagination каза:
http://php.net/manual/en/function.curl-multi-exec.php
като цяло php не е удобен за тази цел, избери си език с нишки. И по възможност да не минава през веб сървъра - пусни го през CLI.
С горното може малко да "забързаш" процеса, но като цяло ако пропадне някъде трябва да си осигуриш механизъм да не почваш всеки път от начало.
Поздрави.

Дааа мислих по темата, но незнам как да направя такъв механизъм. Още го обмислям като варянт как ще се получи. Ще видя как ще подкарам системата през CLI.
 
50 милиона са нищо, но щом нямаш контрол върху сървъра, от който ще взимаш инфото - няма кво да направиш, освен да намалиш заявките. Пък и PHP хич не е за тая работа. :D
 
pix3l каза:
50 милиона са нищо, но щом нямаш контрол върху сървъра, от който ще взимаш инфото - няма кво да направиш, освен да намалиш заявките. Пък и PHP хич не е за тая работа. :D

То са нищо но наистина нямам контрол върху това от къде ще взимам инфото. Имам стабилни познания само по php и минимални по C++, като на вторият език няма да се справя да си създам кода за обработка на инфото. :)
 
eLite каза:
Такива операции принципно се извъшват на заден план, за предпочитане с опашки (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 по няколко пъти за да обработиш съобщенията в опашката по-бързо.

Чесно да ти кажа не разбрах кое как да пусна. Четох по темата но не виждам как мога да извъртя на заден план толкова много итерации, къде да ги реализирам на free web hosting и така нататък. Само въпроси ми се породиха, четох по тях но нещо не откривам сякаш отговора в това нещо. Пак времето ще е изключително огромно за обхождане на файловете.
 
Върти ми се нещо в главата някак да направя така, че да извъртя всичките итерации и да очаквам отговор от тях някога си...
 
dakata__92 каза:
Върти ми се нещо в главата някак да направя така, че да извъртя всичките итерации и да очаквам отговор от тях някога си...


Не можеш да извъртиш всички 50млн. заявки и да кажеш на сървъра в кой момент искаш отговор.
Работата е асинхронизация. Докато пращаш заявка да не ти се блокира кода, докато не получиш отговор.
Както казаха по-горе. PHP сигурно е най-неправилния вариант за тази цел.

Аз бих използвал NodeJS като алтернатива, ако не съм запознат с езици като C#, Java, C(++)...
 
Revelation каза:
dakata__92 каза:
Върти ми се нещо в главата някак да направя така, че да извъртя всичките итерации и да очаквам отговор от тях някога си...


Не можеш да извъртиш всички 50млн. заявки и да кажеш на сървъра в кой момент искаш отговор.
Работата е асинхронизация. Докато пращаш заявка да не ти се блокира кода, докато не получиш отговор.
Както казаха по-горе. PHP сигурно е най-неправилния вариант за тази цел.

Аз бих използвал NodeJS като алтернатива, ако не съм запознат с езици като C#, Java, C(++)...
Знам но системата ми е доооста сложна и нямам познанията да я пренапиша изцяло на някой друг език. Знам, че трябва да чака респонд в цикъла, просто размишлявах на глас и с перо в ръка. Нямам стабилни познания на друг език за да разчитам и да успея да подкарам тази система на тях. Вероятно нещо на JS бих могъл да напиша но то там по-зле ще е. Мислех си да напиша някакъв shell да подкарва системата с команда и на заден фон дори да изключа компа сървъра да извърти всичките цикли. Ако трябва 147 реда с команди ще напиша и ще пусна всичките една по една в отделни файлове и ще ще пусна всеки един да си върти сам за него си. Стига на заден фон да си върти цикъла дори след затваряне на приложението. Например:
1.php с код за стартиране на файл 1 с 365000 итерациии после 2.php със стартов код и файл 2 иии така нататък.
 
Каква точно е целта на това приложение? Дай малко инфо, за да можем да предложим свястна алтернатива... :D
 
Друг проблем с PHP е, че ако не ти е написан читаво кода, със сигурност ще запълниш memory лимита на сървъра с толкова итерации.

Не знам какви други съвети очакваш да получиш.

Ако знаеш JavaScript, какъв е проблема да пренапишеш нещата и да използваш NodeJS ?
Ако седнеш и попрочетеш малко съм сигурен, че по-бързо ще се справиш с проблема си отколкото тука да се въртим на едно място и да очакваш нови съвети как да забързаш този процес.
 
pix3l каза:
Каква точно е целта на това приложение? Дай малко инфо, за да можем да предложим свястна алтернатива... :D

Алтернатива няма. Единствено от моя страна мога да оптимизирам нещата.

Revelation каза:
Друг проблем с PHP е, че ако не ти е написан читаво кода, със сигурност ще запълниш memory лимита на сървъра с толкова итерации.

Не знам какви други съвети очакваш да получиш.

Ако знаеш JavaScript, какъв е проблема да пренапишеш нещата и да използваш NodeJS ?
Ако седнеш и попрочетеш малко съм сигурен, че по-бързо ще се справиш с проблема си отколкото тука да се въртим на едно място и да очакваш нови съвети как да забързаш този процес.

JS не е за тази работа. Първо кода се изпълнява в браузъра на потребителя (мен) и затворя ли го край. Второ PHP e по-бърз. Отварям txt файла и обарботвам масивите и си правя заявките. Мемори лимита лесно се оправя, като в кода имам още на първите три реда този код:

PHP:
ini_set('memory_limit', '-1');
ini_set('max_execution_time', 0); 
ini_set('upload_max_filesize', '200M');
 
Първо, предложиха ти nodejs.

Второ:
Първо кода се изпълнява в браузъра на потребителя (мен) и затворя ли го край.

Не, в този случай javascript e server side.

Второ PHP e по-бърз.
Това е мнооого спорно. :) http://www.hostingadvice.com/blog/comparing-node-js-vs-php-performance/

Мемори лимита лесно се оправя, като в кода имам още на първите три реда този код.

А като свърши паметта? :)
 
Fakeheal каза:
Първо, предложиха ти nodejs.

Второ:
Първо кода се изпълнява в браузъра на потребителя (мен) и затворя ли го край.

Не, в този случай javascript e server side.

Второ PHP e по-бърз.
Това е мнооого спорно. :) http://www.hostingadvice.com/blog/comparing-node-js-vs-php-performance/

Мемори лимита лесно се оправя, като в кода имам още на първите три реда този код.

А като свърши паметта? :)

Няма да свърши. Единственият голям масив с данни се получава при първото прочитане на файла. Тоест file("1.txt"); Циккъла си върти по всеки ред от този файл, но не пълня паметта. Един файл ми е с 4 MB - та големина. Ще генерира файл с горе долу 10MB големина. Плюс това в цикъла се ползва
PHP:
file_put_contents("responde1.txt", PHP_EOL, FILE_APPEND | LOCK_EX);
което товари паметта, но не може да превиша лимита толкова много. Това е за един файл с 365 000 итерации в себе си. Все пак първоначалната ми идея беше да ги пусна последователно, не паралелно заедно и това нямаше да е проблем. 4 + 10 е 14 MB хайде 15 на файл да ги сложа, това са 147 * 15 = 2205 MB. Но при паралелно въртене. При последователно не мога да се доближа до границата от 200 която съм поставил. Ще я направя и 3 GB-та ако трябва, по торент тракерите се качват филми с такава големина.
 
Fakeheal каза:
Ми, добре :)

Малък офтопик, но може да поискаш да прочетеш как работят торент тракерите. И защо се казват tracker-и.
Ще я направя и 3 GB-та ако трябва, по торент тракерите се качват филми с такава големина.

Досетих се каква простотия съм написал. На работа съм ииии вниманието ми е другаде. Нищо, благодаря за офтопика. :?:
 
dakata__92 каза:
Чесно да ти кажа не разбрах кое как да пусна. Четох по темата но не виждам как мога да извъртя на заден план толкова много итерации, къде да ги реализирам на free web hosting и така нататък. Само въпроси ми се породиха, четох по тях но нещо не откривам сякаш отговора в това нещо. Пак времето ще е изключително огромно за обхождане на файловете.

Това имах в предвид:
6841.png
 

Back
Горе